in()中变量传递参数无法查询到数据,直接填却可以查到
在表test_db.dbo.product中有以ae,bs,st开头的产品以及其他的产品,现在需要挑出
以ae,bs开头的产品,因为需要挑的产品名可能变化,所以这里用了一个变量。
奇怪的是在in()中用select @prd_char_1 得到的结果是 'ae ', 'bs ',
如果直接填 'ae ', 'bs '能正常查询到结果
但是如果用变量替换进去查询的结果却为空。
完整代码如下。
假设表produc有以下数据
product_id product_fullname
1 ae123
2 bs234
3 aeaas
4 bsfdsa
5 aasdfd
6 bsfdas
希望通过查询得到的结果为
1 ae123
2 bs234
3 aeaas
4 bsfdsa
6 bsfdas
重点是这里要使用变量传递参数.
declare @prd_char varchar(50),@prd_char_1 varchar(50)
set @prd_char= ':ae:,:bs: '
set @prd_char_1=replace(@prd_char, ': ', ' ' ' ')
--select @prd_char_1
select * from test_db.dbo.product e where left(e.product_fullname,2)
in (@prd_char_1)
------解决方案--------------------declare @prd_char varchar(50),@prd_char_1 varchar(50)
set @prd_char= ':ae:,:bs: '
set @prd_char_1=replace(@prd_char, ': ', ' ' ' ')
--select @prd_char_1
declare @sql varchar(800)
set @sql= 'select * from test_db.dbo.product e where left(e.product_fullname,2)
in ( '+@prd_char_1+ ') '
exec(@sql)
------解决方案--------------------declare @prd_char varchar(50),@prd_char_1 varchar(50)
set @prd_char= 'ae,bs '
--set @prd_char_1=replace(@prd_char, ': ', ' ' ' ')
--select @prd_char_1
select * from test_db.dbo.product e where charindex( ', '+left(e.product_fullname,2)+ ', ', ', '+@prd_char+ ', ')> 0