2016-12-01 170 views
0

我已聲明變量&附加字符串,逗號分隔。這個變量我想用於另一個查詢的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

回答

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。

相關問題