SQL Server で次のことを行う方法はありますか。
DECLARE @list nvarchar(MAX) = '1, 2, 3, 4, 5, 6';
SELECT * FROM table WHERE ID IN ( @list );
-- Column ID is type bigint
エラー:
データ型 nvarchar から bigint への変換中にエラーが発生しました。
SQL Server で次のことを行う方法はありますか。
DECLARE @list nvarchar(MAX) = '1, 2, 3, 4, 5, 6';
SELECT * FROM table WHERE ID IN ( @list );
-- Column ID is type bigint
エラー:
データ型 nvarchar から bigint への変換中にエラーが発生しました。
それをintに変換したくありません。代わりにlike
、比較に使用します。
select *
from table
where ', '+@list+', ' like ', '+cast(id as varchar(255)) + ', ';
これには、クエリがインデックスを使用しないという欠点があります。それが重要な場合は、動的 SQL を使用できます。
DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
declare @sql nvarchar(max) = 'SELECT * FROM table WHERE ID IN ('+ @list +')';
exec sp_executesql @sql;
使用してDynamic SQL
ください。
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @list nvarchar(10) = '1, 2, 3, 4, 5, 6';
SET @SQLQuery = 'SELECT * FROM table WHERE ID IN (' + @list + ')'
EXECUTE(@SQLQuery)