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

求教:数据类型转换的问题
求教各位前辈:有两张表TA、TB
TA  
Id int a1 varchar(50)  
1 10,20  
2 10,20,21

TB  
b1 int b2 varchar(20)
10 桌子
15 书包
20 椅子
21 书本

执行以下语句

declare @a1 as varchar(50)
set @a1=(select a1 from TA where id=1 )

select * from TB
where AppId in ( @a1 )


预期结果: 

b1 b2
10 桌子
20 椅子


但执行以上语句,系统报错:
服务器: 消息 245,级别 16,状态 1,行 6
将 varchar 值 '10,20' 转换为数据类型为 int 的列时发生语法错误。


谢谢啦!



------解决方案--------------------
declare @a1 as varchar(50)
set @a1=(select a1 from TA where id=1 )

select * from TB
where charindex(','+ltrim(AppId)+',',','+@a1+',' )>0


------解决方案--------------------
SQL code

declare @a1 as varchar(50)
set @a1=(select a1 from TA where id=1 )

exec('select * from TB
where AppId in ('+@a1+')')

------解决方案--------------------
SQL code
;with tt as 
(
select a.id , a1 = substring(a.a1 , b.number , charindex(',' , a.a1 + ',' , b.number) - b.number) 
from TA a join master..spt_values  b 
on b.type='p' and b.number between 1 and len(a.a1)
where substring(',' + a.a1 , b.number , 1) = ','
)
select TB.* from tt ,TB where tt.id = TB.id and tt.id=1