2011-04-20 76 views
0

可能重複:
Parameterizing a SQL IN clause?SQL Server 2005中:兩個或多個字符串連接成一個字符串,並傳遞作爲參數

大家好,

我寫一個SQL命令我的項目。我必須將一個字符串參數傳遞給遊標。 但在那個參數我來連接許多字符串,像這樣:

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) 

所以我需要像上面設置的那樣獲取格式。 我該怎麼做?

最好的問候, 紅人

+0

有什麼不對,你已經代碼?請進一步澄清你的問題。 – 2011-04-20 07:33:15

+0

我想要做的是我想在這個語句中使用@strParam:SELECT * FROM tblResult WHERE Field1 IN(@strParam)但如果我們像這樣運行@strParam不是這種格式('string1','string2') , 對?所以SELECT語句不會得到要求的結果。 – RedsDevils 2011-04-20 07:35:44

回答

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)) 
+0

我意識到,上述拆分整數,而不是字符串。只需注意區別。 – Blazes 2011-04-20 08:07:56

+0

謝謝!我會很快嘗試! – RedsDevils 2011-04-20 09:08:19

相關問題