可能重复:
Need help in dynamic query with IN Clause在存储过程中动态创建IN子句
我使用SQL Server 2008,这是我面临的问题。我有一个名为汽车与列公司的表。现在我有一个存储过程,看起来像这样
CREATE PROCEDURE FindCars (@CompanyNames varchar(500)) AS SELECT * FROM Cars WHERE Company IN (@CompanyNames)
我想是这样的,未能
DECLARE @CompanyNames varchar(500) SET @CompanyNames = '''Ford'',''BMW''' exec FindCars @CompanyNames
我没有得到任何行返回。当我做了以下
DECLARE @CompanyNames varchar(500) SET @CompanyNames = '''Ford'',''BMW''' Select @CompanyNames
我得到以下结果
'Ford','BMW'
,如果我在存储过程中的SELECT语句替换该值,它的工作原理
SELECT * FROM Cars where Company in ('Ford','BMW')
因此我认为存储过程似乎将'Ford','BMW'
视为一个字符串而不是数组。有人可以帮助我这个。如何动态构造存储过程中select语句的IN子句中所需的字符串/数组。
只是补充一点,我觉得这是更好的'选择*从汽车 内部加入 ( \t选择项目从dbo.split_string(@input_string) )k 在K.Item = Company'因为你用'IN'做迭代Predicate – 2012-08-08 11:59:58
第一种方法是我推荐的方法,你可以在这里找到一个很好的分割函数: [http://www.sqlservercentral.com/articles/Tally+Table /72993/](http://www.sqlservercentral.com/articles/Tally+Table/72993/) – lennin92 2017-02-20 15:25:32