2016-12-01 55 views
0

変数&をコンマで区切って追加しました。この変数は、別のクエリのwhere条件に使用します。varchar値 'xxx'をデータ型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型です。私にエラーを与えている: -

データ型 intにvarchar型の値「XXX」を変換する際の変換に失敗しました。

+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'' 

リストの最後のIDとして-555は、そうでない場合は、構文を破るだろう、最後のコンマに追加することがあります。そこに存在しないIDを使用してください。

関連する問題