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

时间:2016-12-01 09:07:52

标签: sql sql-server

我宣布了一个变量&附加逗号分隔的字符串。这个变量我想用于另一个查询的where条件。

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'转换为数据类型时转换失败   中间体

1 个答案:

答案 0 :(得分:1)

你需要使用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。