gpt4 book ai didi

sql - 在存储过程中动态创建 IN 子句

转载 作者:行者123 更新时间:2023-12-04 11:56:15 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Need help in dynamic query with IN Clause



我正在使用 SQL Server 2008,这是我面临的问题。我有一个名为 Cars 的表,其中包含一个 Company 列。现在我有一个看起来像这样的存储过程

创建程序 FindCars (@CompanyNames varchar(500))
作为
SELECT * FROM Cars WHERE Company IN (@CompanyNames)

我试过这样的事情但失败了

声明@CompanyNames varchar(500)
SET @CompanyNames = '''福特'',''宝马'''

执行 FindCars @CompanyNames

我没有得到任何返回的行。当我执行以下操作时

声明@CompanyNames varchar(500)
SET @CompanyNames = '''福特'',''宝马'''

选择@CompanyNames

我得到以下结果

“福特”、“宝马”

如果我在存储过程中的 select 语句中替换这个值,它就可以工作

SELECT * FROM Cars where Company in ('Ford','BMW')

因此我认为存储过程似乎正在处理 'Ford','BMW'作为一个字符串而不是数组。有人可以帮我解决这个问题。如何动态构造存储过程中 select 语句的 IN 子句中所需的字符串/数组。

最佳答案

您是对的,您创建了一个字符串,并将其作为包含一个字符串的字符串列表进行处理。逗号只是那个字符串中的字符。 SQL Server 中唯一与数组等效的是表。

例如; WHERE x IN (SELECT y FROM z) .

为此,很多人创建了一个 SPLIT_STRING()从给定的逗号分隔字符串返回项目表的函数...

WHERE x IN (SELECT item FROM dbo.split_string(@input_string))

有很多方法可以实现该拆分字符串。一些返回字符串,一些转换为整数,一些接受第二个“分隔符”参数等。您可以在互联网上搜索 SQL SERVER SPLIT STRING。并获得许多结果 - 包括在 StackOverflow 中的此处。

另一种方法是使用动态 SQL;写 SQL 的 SQL。
SET @sql = 'SELECT * FROM x WHERE y IN (' + @input_string_list + ')'

SP_EXECEUTESQL @sql

(我推荐 SP_EXECUTESQL 而不是 EXEC 因为前者允许您使用参数化查询,但后者不允许。)

关于sql - 在存储过程中动态创建 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11863848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com