declare @id_sz varchar(200)
set @id_sz='70,73,76,05'
select * from aTable where id_sz in (@id_sz)  //这样查询不到信息//如果用拼SQL语句的方式则或以,但我不能用那种方式

解决方案 »

  1.   

    --这样,用动态SQL.
    declare @id_sz varchar(200) 
    set @id_sz='70,73,76,05' 
    exec('select * from aTable where id_sz in ('+@id_sz+')')
      

  2.   

    --或者这样。
    declare @id_sz varchar(200) 
    set @id_sz='70,73,76,05' 
    select * from aTable where charindex(','+id_sz+',',','+@id_sz+',')>0
      

  3.   

    谢谢楼上朋友。
    我是在一个存储过程中要用,上面是我简单地例子,就是想达到那样的目的。因为原来的存储过程都写好了,
    没有用拼SQL语句的方式,而且参数@id_sz传递进来是唯一的一个代码,现在客户要求可能是一个或一个以上的代码了,
    所以原条件中的一个 id_sz=@id_sz 要改 ,想到是不是用IN,因该存储过程有些复杂,所以暂时不准备用拼SQL语句的方式来实现,如果实现找不到好方式,也就只好用拼SQL语句(即楼上动态SQL语句)了。
      

  4.   


    declare @id_sz nvarchar(1000)
    set @id_sz = '1,2,3,4'set @id_sz=@id_sz+','select * from aTable where id_sz in
    (select b.col
    from (select col=convert(xml,'<r><v>'+replace(left(@word,len(@word)-1),',','</v><v>')+'</v></r>')) a
    outer apply (select col=C.v.value('.','nvarchar(10)') from a.col.nodes('/r/v') C(v)) b)