在表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)

解决方案 »

  1.   

    记住,不是 in('ae,bs') 而应该是 in('ae','bs') ,处理好单引号的问题。
      

  2.   

    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)
      

  3.   

    回  libin_ftsafe(子陌红尘:TS for Banking Card) ( )
    使用
    set @prd_char=':ae:,:bs:'
    set @prd_char_1=replace(@prd_char,':','''')
    后得出的结果
    select @prd_char_1
    是'ae','bs'
    而并非你说的'ae,bs',这点我有注意到。
      

  4.   

    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 charindex(','+left(e.product_fullname,2)+',',','+@prd_char+',')>0
      

  5.   

    in (集合)无论把拼得@prd_char_1多漂亮,in (@prd_char_1),@prd_char_1也只是(集合)中的一个元素,而不会根据你的拼法拆分成多个元素。
      

  6.   

    多谢tomyuansir() ( ) 的答案。
    谢谢Limpire(昨夜小楼) ( )的热心回复。问题已解决。另外 问 Limpire(昨夜小楼) ( )
    按照正常的写法应该是in('ae','bs'),现在我把变量@prd_char_1做成了'ae','bs'然后替换过去
    为什么会不行?