2010-08-11 42 views
2

我有一個字符串,其中包含一個逗號分隔列表的id我想在where子句中使用。從連接字符串的SQL where子句

我該如何做到這一點?基本上我有:

set @ids = '5,8,14,5324,' 

SELECT * FROM theTable WHERE Id IN (@ids) 

但@ids是一個varchar和Id是一個int。

任何想法非常讚賞。

回答

2

另一個選擇,而不是動態SQL將解析@TempTable到一個#TempTable(一個解析函數的例子是here),然後加入它。

select * 
    from theTable t1 
     inner join #TempTable t2 
      on t1.Id = t2.Id 

或者可以完全繞過#TempTable

select * 
    from theTable t1 
     inner join dbo.fnParseStringTSQL(@ids, ',') t2 
      on t1.Id = cast(t2.string as int) 
1

您必須使用您當前的方法使用動態SQL。確保您的@ids有尾隨逗號修剪。

DECLARE @DynSQL NVARCHAR(2000) 

SELECT @DynSQL= 'SELECT * FROM theTable WHERE Id IN (' + @ids + ')' 

EXEC sp_executesql @DynSQL 

請記住,動態SQL運行在其自己的範圍內。簡單的選擇將正常工作。

+1

@DynSQL必須是ntext/nchar/nvarchar – 2010-08-11 20:40:53

+0

@OMG:謝謝,你是對的。 – 2010-08-11 20:42:01

0

或者可以使用一個存儲過程與表變量作爲輸入變量(以下代碼從上面的鏈接假定​​解析功能)然後加入該表以獲得結果。