将varchar值'xxx'转换为数据类型int转换失败int

将varchar值'xxx'转换为数据类型int转换失败int

问题描述:

我已声明变量&附加字符串,逗号分隔。这个变量我想用于另一个查询的where条件。将varchar值'xxx'转换为数据类型int转换失败int

declare @AllIDs varchar(max) 
set @AllIDs = '' 

select 
    @AllIDs = (@AllIDs + cast(ID as varchar(10)) + ',') 
from EmployeeDetail WHERE Code In(
'ABC1','ABC2' 
) 

select @AllIDs 

select * from TBL_OT where EmployeeId In(@AllIDs) 

EmployeeId是int类型的。所以它给我错误: -

将varchar值'xxx'转换为数据类型为int时转换失败int。

+0

你只能用动态SQL来做到这一点。当你需要'in('x','y')'时,你的查询将评估为'in('x,y')'。 – HoneyBadger

+0

如果您想为变量使用IN运算符。您已使用动态查询。 – Vikram

你需要使用DynamicSQL:

declare @AllIDs nvarchar(max) 
set @AllIDs = '(' 

select 
    @AllIDs = (@AllIDs + cast(ID as nvarchar(10)) + ',') 
from EmployeeDetail WHERE Code like 'ABC%' 

set @AllIDs = @AllIDs + '-555)' 

declare @sql nvarchar(max) = ' select * from Tbl_OT where EmployeeId In ' + @ALLIDs + ' AND OTDate = ''2016-11-06''' 

print @sql 
exec sp_executesql @sql,N'' 

的-555在列表中的最后一个ID是有添加到最后一个逗号,否则将打破语法。在那里使用一些不存在的ID。