逗号在sql语句中用变量分隔的值

时间:2013-03-20 11:37:27

标签: sql-server-2008-r2

我在变量(比如变量名@listobj)

中得到这样的逗号分隔值
'abc' , 'xyz'

但是当我使用以下声明时,它没有给我正确的结果

SELECT * FROM someTable
Where column1 IN (@listobj)

但abc出现在表格中。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

创建一个将字符串拆分为

的函数
CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))     

返回@temptable TABLE(items varchar(8000))
作为
开始
声明@idx int
声明@slice varchar(8000)

选择@idx = 1
    如果len(@String)< 1或@String为null则返回

而@idx!= 0
开始
    设置@idx = charindex(@Delimiter,@ String)
    如果@idx!= 0
        设置@slice = left(@ String,@ idx - 1)
    否则
        设置@slice = @String

if(len(@slice)>0)
    insert into @temptable(Items) values(@slice)     

set @String = right(@String,len(@String) - @idx)     
if len(@String) = 0 break     

端 返回

然后调用SELECT * FROM someTable函数 其中column1 IN(dbo.Split(@listobj))

enter link description here

答案 1 :(得分:1)

SQLFiddle demo

select * from someTable
where ','+LTRIM(RTRIM(@listobj))+',' LIKE '%,'+LTRIM(RTRIM(column1))+',%'

答案 2 :(得分:0)

一个经典问题,答案是否定的,你不能以这种方式使用参数。有几种解决方法

其中一个是解析存储过程中的值,并在稍后要执行的过程中动态生成sql。但是,这不是一个好习惯。

参考这个问题

How to pass a comma separated list to a stored procedure?

并在这里进行了一些很好的讨论

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/1ccdd39e-8d58-45b2-9c21-5c4dbd857f95/