日期:2014-05-18  浏览次数:20423 次

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