2

我在一个变量中得到这样的逗号分隔值(比如说变量名@listobj)

'abc' , 'xyz'

但是当我使用下面的语句时,它并没有给我正确的结果

SELECT * FROM someTable
Where column1 IN (@listobj)

但 abc 出现在表中。

我在哪里做错了?

4

3 回答 3

2

创建一个将字符串拆分为的函数

    CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))     
returns @temptable TABLE (items varchar(8000))     
as     
begin     
declare @idx int     
declare @slice varchar(8000)     

select @idx = 1     
    if len(@String)<1 or @String is null  return     

while @idx!= 0     
begin     
    set @idx = charindex(@Delimiter,@String)     
    if @idx!=0     
        set @slice = left(@String,@idx - 1)     
    else     
        set @slice = @String     

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

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

then make call to the function SELECT * FROM someTable
Where column1 IN (dbo.Split(@listobj))

在此处输入链接描述

于 2013-03-20T11:42:05.120 回答
1

SQLFiddle 演示

select * from someTable
where ','+LTRIM(RTRIM(@listobj))+',' LIKE '%,'+LTRIM(RTRIM(column1))+',%'
于 2013-03-20T11:46:50.817 回答
0

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

其中之一是解析存储过程内部的值,并在过程内部动态生成 sql 以供稍后执行。但是,这不是一个好的做法。

参考这个问题

如何将逗号分隔的列表传递给存储过程?

还有一些很好的讨论here

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

于 2013-03-20T11:41:19.840 回答