如何将NVARCHAR逗号分隔列表转换为INT?

时间:2013-07-19 18:44:27

标签: sql sql-server casting type-conversion

有没有办法在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时出错。

2 个答案:

答案 0 :(得分:8)

您不希望将其转换为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;

答案 1 :(得分: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)