0

うまくいけば、私はこれを正しい方法で行っています。

カンマで区切られた整数のリスト (常に正の整数、小数点以下なし) をストアド プロシージャに渡す必要があります。ストアド プロシージャは、WHERE 句の IN 演算子で整数を使用します。

WHERE [PrimaryKey] IN (1,2,4,6,212);

フロントエンドは PHP で、接続は ODBC 経由で行われます。パラメーターを一重引用符で囲み、リストがクエリに到達する前にストアド プロシージャでそれらをフィルター処理しようとしましたが、うまくいかないようです。

私が得ているエラーは次のとおりです。

varchar 値 '1,2,4,6,212' をデータ型 int に変換するときに変換に失敗しました。

私はこれまでにこれを行ったことがなく、これまでの研究では肯定的な結果は得られていません.

4

2 に答える 2

2

まず、SQL 関数を使用して区切りデータの分割を実行しましょう。

CREATE FUNCTION dbo.Split
(
    @RowData nvarchar(2000),
    @SplitOn nvarchar(5)
)  
RETURNS @RtnValue table 
(
    Id int identity(1,1),
    Data nvarchar(100)
) 
AS  
BEGIN 
    Declare @Cnt int
    Set @Cnt = 1

    While (Charindex(@SplitOn,@RowData)>0)
    Begin
        Insert Into @RtnValue (data)
        Select 
            Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))

        Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))
        Set @Cnt = @Cnt + 1
    End

    Insert Into @RtnValue (data)
    Select Data = ltrim(rtrim(@RowData))

    Return
END

これを使用するには、次のように、関数に区切られた文字列と区切り文字を渡すだけです。

SELECT
  *
FROM
  TableName
WHERE
  ColumnName IN (SELECT Data FROM dbo.Split(@DelimitedData, ','))

データ型が原因でまだ問題がある場合は、次を試してください。

SELECT
  *
FROM
  TableName
WHERE
  ColumnName IN (SELECT CONVERT(int,Data) FROM dbo.Split(@DelimitedData, ','))
于 2013-01-31T05:54:05.427 に答える
0

コンマ区切りの値リストを渡すことができます。inただし、ステートメント内で自由に使用することはできません。代わりに、次のようなことができます。

where ','+@List+',' like '%,'+PrimaryKey+',%' 

つまり、値が存在するかどうかを確認したいということです。質問に Microsoft のタグが付けられているため、連結に SQL Server 構文を使用しています。

于 2013-01-30T22:59:59.123 に答える