我在变量(比如变量名@listobj)
中得到这样的逗号分隔值'abc' , 'xyz'
但是当我使用以下声明时,它没有给我正确的结果
SELECT * FROM someTable
Where column1 IN (@listobj)
但abc出现在表格中。
我做错了什么?
答案 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))
答案 1 :(得分:1)
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?
并在这里进行了一些很好的讨论