1

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 への変換中にエラーが発生しました。

4

2 に答える 2

7

それを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;
于 2013-07-19T18:46:08.143 に答える
5

使用して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)
于 2013-07-19T18:47:14.030 に答える