0

重複の可能性:
SQL IN 句をパラメータ化しますか?

こんにちは、みんな、

プロジェクトの SQL コマンドを作成しています。1 つの文字列パラメーターをカーソルに渡す必要があります。しかし、そのパラメーターでは、次のように多くの文字列を連結する必要があります。

   DECLARE @strParam VARCHAR(MAX)
   SET @strParam = 'string1' + ',' + 'string2' + ',' ... etc

それから私はこのように使いたい:

   SELECT * FROM tblResult WHERE Field1 IN (@strParam)

次のステートメントの代わりに:

   SELECT * FROM tblResult WHERE Field1 IN ('string1' + ',' + 'string2' + ',' ... etc)

したがって、上記で設定したような形式を取得する必要があります。どうやってやるの?

よろしく、レッズ

4

1 に答える 1

0

これにより、csv がテーブルに分割されます。

CREATE FUNCTION GetIDs(
    @ids_csv        nvarchar(255))
    RETURNS @table_ids TABLE 
    (
        ID INT,
        PRIMARY KEY(ID)
    ) AS
BEGIN
    DECLARE @app_id varchar(10)
    DECLARE @pos int
    SET @ids_csv = LTRIM(RTRIM(@ids_csv))+ ','
    SET @pos = CHARINDEX(',', @ids_csv, 1)
    IF REPLACE(@ids_csv, ',', '') <> ''
    BEGIN
        WHILE @pos > 0
        BEGIN
            SET @app_id = LTRIM(RTRIM(LEFT(@ids_csv, @pos - 1)))
            INSERT INTO @table_ids(ID) VALUES(@app_id)
            SET @ids_csv = RIGHT(@ids_csv, LEN(@ids_csv) - @pos)
            SET @pos = CHARINDEX(',', @ids_csv, 1)
        END
    END
    RETURN
END

次に、これを行うことができます:

 SELECT * FROM tblResult WHERE Field1 IN (SELECT * FROM GetIDs(@strParam))
于 2011-04-20T07:30:24.143 に答える