1

id の動的数を csv 形式で sql パラメータとして渡し、それらを select ステートメントの where 句で使用したいと考えています。

SQLでこれを行う方法がわかりません。

擬似コードは次のようになります。

@ids varchar(max)

select stuff from table
where stuff =  each.@ids.split(',')

どんな助けでも大歓迎です。

少し調査した後、これを行う最善の方法は、csv ではなく xml を使用することだと思います。これは、労力が少ないため、最良の回答を選択してこれを閉じます。みんなありがとう。

4

2 に答える 2

3

動的リストを渡したいことが正しく理解できたら、SQL Server でテーブル値関数を作成します。

CREATE FUNCTION ParseIds (@ids varchar(MAX)) RETURNS @TempIds TABLE (Id INT)
AS
BEGIN
    DECLARE @Pos INT 
    SET     @Pos = 1

    SET     @ids = ',' + @ids + ','

    WHILE   @Pos < LEN(@ids)
    BEGIN
            INSERT  @TempIds 
            VALUES (Convert(int, SUBSTRING(@ids,@Pos+1,CHARINDEX(',',@ids,@Pos+1)-@Pos-1)))

            SET     @Pos = CHARINDEX(',',@ids,@Pos+1)
    END

    RETURN
END

動的 CSV Id リストをストアド プロシージャに渡し、次のようにクエリで使用します。

select stuff from table
where stuff IN (SELECT id FROM dbo.ParseIds(@ids)) 
于 2013-07-02T22:40:04.400 に答える
0

INクエリは必要なことを行います:

SELECT stuff FROM table WHERE stuff in (1,4,7,9)

安全でないソース (ユーザーが入力した @id など) から SQL を構築する場合は、SQL インジェクションを検討してください。

于 2013-07-02T22:24:46.227 に答える