日期:2014-05-18  浏览次数:20381 次

sql存储过程的难题 急待解决
有一表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 还是错误.. 寻求解决办法...

------解决方案--------------------
Exec (@str)
------解决方案--------------------
是 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数字应该没有问题
------解决方案--------------------
Exec (@str)