使用存储过程在“In”子句中传递多个值时查询不返回数据
Posted
技术标签:
【中文标题】使用存储过程在“In”子句中传递多个值时查询不返回数据【英文标题】:Query not returning data while multiple values passing in "In" Clause using stored procedure 【发布时间】:2018-07-03 14:20:21 【问题描述】:这是我的代码:
declare @data nvarchar(max) = 'AA1,AA2,AA3'
set @data = replace(@data, ',', ''',''')
set @data = ' ''' + @data + ''' '
select @data
select *
from tbl_Member
where memberName in (@data)
我将 'AA1,AA2,AA3' 发送到 @data
,它返回 'AA1','AA2','AA3'
在IN
子句中使用返回的数据时,我没有从表中获取数据。
请帮助我,提前谢谢。
【问题讨论】:
【参考方案1】:我理解为什么你会认为这会起作用,但解析器不会将你的语法读取为文字。这里应该使用表参数,可以避免动态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)
【讨论】:
当然@QWTest【参考方案2】:试试这个
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)
【讨论】:
【参考方案3】:试试这个。
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+')')
【讨论】:
以上是关于使用存储过程在“In”子句中传递多个值时查询不返回数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 WHERE IN SQL 子句将字符串值从单个值拆分为多个值以获取数据
在MySQL存储过程中的WHERE子句中使用IN param