可能重複:
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