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

发布于 2024-11-02 17:22:24 字数 656 浏览 4 评论 0原文

可能的重复:
参数化 SQL IN 子句?

大家好,

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

所以我需要获取我们上面设置的格式。 我怎样才能做到这一点?

此致, 红人

Possible Duplicate:
Parameterizing a SQL IN clause?

Hi All,

I am writing a SQL command for my project. I have to pass one string parameter to cursor.
But at that parameter I have to concatenate many strings, like this:

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

Then I want to use like this:

   SELECT * FROM tblResult WHERE Field1 IN (@strParam)

instead of the following statement:

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

So I need to get the format as like we set above.
How can I do that?

Best Regards,
Reds

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青朷 2024-11-09 17:22:24

这会将 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))

This will split the csv into a table.

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

Then, you can do this:

 SELECT * FROM tblResult WHERE Field1 IN (SELECT * FROM GetIDs(@strParam))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文