将充满逗号分隔值的varchar传递给SQLServer IN函数

将充满逗号分隔值的varchar传递给SQLServer IN函数

我有一个SQLServer存储过程,我想在其中传递一个varchar中充满逗号分隔的值。IN功能。例如:

DECLARE @Ids varchar(50);SET @Ids = '1,2,3,5,4,6,7,98,234';SELECT * FROM sometable 
WHERE tableid IN (@Ids);

当然,这是行不通的。我知道错误:

将varchar值‘1,2,3,5,4,6,7,98,234’转换为int数据类型时,转换失败。

我如何才能做到这一点(或类似的事情)而不诉诸于构建动态SQL?


互换的青春
浏览 1324回答 3
3回答

慕丝7291255

当然,如果你像我一样懒惰,你可以这么做:Declare @Ids varchar(50) Set @Ids = ',1,2,3,5,4,6,7,98,234,'Select * from sometable where Charindex(','+cast(tableid as varchar(8000))+',',  @Ids) > 0

跃然一笑

没有表,没有函数,没有循环基于将列表解析为DBA建议使用XML的表的想法。Declare&nbsp;@Ids&nbsp;varchar(50)Set&nbsp;@Ids&nbsp;=&nbsp;‘1,2,3,5,4,6,7,98,234’DECLARE&nbsp;@XML&nbsp;XMLSET&nbsp;@XML&nbsp;=&nbsp;CAST('<i>'&nbsp;+&nbsp;REPLACE(@Ids,&nbsp;',',&nbsp;'</i><i>')&nbsp;+ &nbsp;'</i>'&nbsp;AS&nbsp;XML)SELECT&nbsp;*&nbsp;FROM &nbsp;&nbsp;&nbsp;&nbsp;SomeTable&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;@XML.nodes('i')&nbsp;x(i)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;&nbsp;SomeTable&nbsp;.Id&nbsp;=&nbsp;x.i.value('.',&nbsp;'VARCHAR(MAX)')它们的表现似乎与@KM的回答相同,但我认为,要简单得多。
打开App,查看更多内容
随时随地看视频慕课网APP