有一表A 
id int     f_id varchar(50)
1          1,2,3
有一表B
b_id int   b_name varchar(50)
1          aaa
2          bbb
3          ccc
4          ddd
要写一存储过程  返回的是A表中f_id中对应的B表中的记录
我是这样写的
1.
Declare @A_fid varchar(50)
Select @A_fid=f_id from A where id=1
Select * from B where b_id in(@A_id)  错误!
2.
Declare @A_fid varchar(50)
Declare @str varchar(2000)
Select @A_fid=f_id from A where id=1
Set @str='select * from B where b_id in('+@A_fid+')'
Exec @str  还是错误..  寻求解决办法...  

解决方案 »

  1.   

    Select @A_fid=f_id from A where id=1
    感觉问题出在这个地方,没有帮你测试过,你测试一下看看吧.
      

  2.   

    是  b_id in(@A_id)和 b_id in( '+@A_fid+ ') ' 
    有问题,因为整型的id和自负型无法匹配,即使强制类型转换好像也会出现问题
    如果b_id in(1,2,3,4,5,6) 好像就没有问题了所以是匹配吃出现了问题我想到的解决方法如下 供参考
    Declare @A_fid varchar(50) 
    Select @A_fid=f_id from A where id=1 
    Select * from B where @A_id like '%'+cast(b_id as varchar)+'%'
    如果你的@A_id 以逗号分割数字 上面的方法匹配id数字应该没有问题
      

  3.   

    问题已经解决了 正如二楼所说
      问题出在 Exec后要加括号....
      

  4.   

    取出来的@A_fid=1,2,3,4
     b_id in(@A_id)应为b_id in ('1','2','3','4')