CREATE PROCEDURE sp_test @id int AS select * from db_test where id=@id
GO这样只能接收一个id,查出一行记录
但是我想从另外一个表中读一个字符串,字段值形式为(1,3,5,8),然后传入存储过程中,查出 1,3,5,8 对应的数据
请问应该怎么做??

解决方案 »

  1.   

    declare @s varchar(1000),@s2 varchar(1000)
    set @s2 = '1,2,3'
    set @s='select * from a where a.id in (' + @s2 + ')'
    select @s
    exec (@s)
      

  2.   

    测试通过,因为你接收一字串,所以将@id类型变了CREATE PROCEDURE sp_test @id varchar(500) AS
    exec('select * from db_test where 序号 in ('+@id+')')
    -----------------------------------------------
    exec sp_test  '1,3,5,8'
      

  3.   

    declare @s varchar(1000),@s2 varchar(1000)
    set @s2 = '1,2,3'
    set @s='select * from a where a.id in (' + @s2 + ')'
    --注释
    --select @s
    exec (@s)
      
      

  4.   

    测试通过,因为你接收一字串,所以将@id类型变了CREATE PROCEDURE sp_test @id varchar(500) AS
    exec('select * from db_test where 序号 in ('+@id+')')
    -----------------------------------------------
    exec sp_test  '1,3,5,8'
    像这样,只查出了id=1这一行,表里有1,2,3,4,5,6共6行
      

  5.   

    我测试过的,如果你用存储过程就是这个思路,问题可能出在参数不一至上,你先用
    select * from db_test where 序号 in (1,2,3,4,5,6) 看能不能查到6行
      

  6.   

    不用In來判斷,改用CharIndexCREATE PROCEDURE sp_test @id Varchar(100)
    AS 
    select * from db_test where CharIndex(',' + Rtrim(id) + ',', ',' + @id + ',') > 0
    GO
      

  7.   

    回 wgzaaa() 
    用select * from db_test where id in (1,2,3,4,5,6)
    可以查到这6行
    id字段是int类型存储过程里是@id varchar(500),这样行吗?CREATE PROCEDURE sp_test @id varchar(500) AS
    exec('select * from db_test where 序号 in ('+@id+')')
      

  8.   

    可以不需要用動態SQL語句來實現的,直接用CharIndex就可以
      

  9.   

    CREATE PROCEDURE sp_test @id Varchar(100)
    AS 
    select * from db_test where CharIndex(',' + Rtrim(id) + ',', ',' + @id + ',') > 0
    GO
    用CharIndex解决了问题请解释一下,Rtrim(id)是什么意思,如果没有Rtrim,就提示数据类型出错,Rtrim好像是去掉字符右边的空格嘛
    这样写是什么意思呢谢谢指教!
      

  10.   

    巧妙的利用Rtrim做類型轉換。你可以這麼寫CREATE PROCEDURE sp_test @id Varchar(100)
    AS 
    select * from db_test where CharIndex(',' + Cast(id As Varchar) + ',', ',' + @id + ',') > 0
    GO這樣,更容易理解一些。