使用存储过程在“ In”子句中传递多个值时查询不返回数据

时间:2018-07-03 14:20:22

标签: sql sql-server sql-server-2008-r2

这是我的代码:

declare @data nvarchar(max) = 'AA1,AA2,AA3'
set @data = replace(@data, ',', ''',''')
set @data = ' ''' + @data + ''' '

select @data

select * 
from tbl_Member 
where memberName in (@data)

我正在向@data发送'AA1,AA2,AA3',它返回'AA1','AA2','AA3'

IN子句中使用返回的数据时,我没有从表中获取数据。

请帮助我,谢谢。

3 个答案:

答案 0 :(得分:0)

尝试

declare @data nvarchar(max) = 'AA1,AA2,AA3'
set @data = replace(@data, ',', ''',''')
set @data = ' ''' + @data + ''' '
DECLARE @query varchar(1024)
set @query = 'select * from tbl_Member where memberName in (' + @data + ')';
exec(@query)

答案 1 :(得分:0)

我了解您为什么会认为可行,但是解析器不会将您的语法读为该文字。您应该在此处使用表参数,并且可以避免使用动态sql。

declare @data table(datas varchar(16))
insert into @data
values
('AA1'),
('AA2'),
('AA3')



declare @tbl_Member table (memberName varchar(64))
insert into @tbl_Member

values
('AA1'),
('AA2'),
('AA3'),
('AA4')

select * 
from @tbl_Member 
where memberName in (select * from @data)

答案 2 :(得分:0)

尝试一下。

declare @data nvarchar(max) = 'AA1,AA2,AA3'
set @data = replace(@data, ',', ''',''')
set @data = ' ''' + @data + ''' '

select @data

EXEC('
select * 
from tbl_Member 
where memberName in ('+@data+')')