SQL Server 2005:将两个或多个字符串合并为一个字符串并作为参数传递

时间:2011-04-20 07:25:40

标签: string sql-server-2005 sqlcommand

  

可能重复:
  Parameterizing a SQL IN clause?

大家好,

我正在为我的项目编写一个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)

所以我需要像上面设置的那样获得格式。 我怎么能这样做?

最诚挚的问候, 红人

1 个答案:

答案 0 :(得分: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))