在表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_1select * from test_db.dbo.product e where left(e.product_fullname,2)
in (@prd_char_1)
以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_1select * from test_db.dbo.product e where left(e.product_fullname,2)
in (@prd_char_1)
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)
使用
set @prd_char=':ae:,:bs:'
set @prd_char_1=replace(@prd_char,':','''')
后得出的结果
select @prd_char_1
是'ae','bs'
而并非你说的'ae,bs',这点我有注意到。
set @prd_char='ae,bs'
--set @prd_char_1=replace(@prd_char,':','''')--select @prd_char_1select * from test_db.dbo.product e where charindex(','+left(e.product_fullname,2)+',',','+@prd_char+',')>0
谢谢Limpire(昨夜小楼) ( )的热心回复。问题已解决。另外 问 Limpire(昨夜小楼) ( )
按照正常的写法应该是in('ae','bs'),现在我把变量@prd_char_1做成了'ae','bs'然后替换过去
为什么会不行?