我有一個字符串,其中包含一個逗號分隔列表的id我想在where子句中使用。從連接字符串的SQL where子句
我該如何做到這一點?基本上我有:
set @ids = '5,8,14,5324,'
SELECT * FROM theTable WHERE Id IN (@ids)
但@ids是一個varchar和Id是一個int。
任何想法非常讚賞。
我有一個字符串,其中包含一個逗號分隔列表的id我想在where子句中使用。從連接字符串的SQL where子句
我該如何做到這一點?基本上我有:
set @ids = '5,8,14,5324,'
SELECT * FROM theTable WHERE Id IN (@ids)
但@ids是一個varchar和Id是一個int。
任何想法非常讚賞。
另一個選擇,而不是動態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)
您必須使用您當前的方法使用動態SQL。確保您的@ids
有尾隨逗號修剪。
DECLARE @DynSQL NVARCHAR(2000)
SELECT @DynSQL= 'SELECT * FROM theTable WHERE Id IN (' + @ids + ')'
EXEC sp_executesql @DynSQL
請記住,動態SQL運行在其自己的範圍內。簡單的選擇將正常工作。
或者可以使用一個存儲過程與表變量作爲輸入變量(以下代碼從上面的鏈接假定解析功能)然後加入該表以獲得結果。
@DynSQL必須是ntext/nchar/nvarchar – 2010-08-11 20:40:53
@OMG:謝謝,你是對的。 – 2010-08-11 20:42:01