2013-07-19 130 views
1

有没有办法做到在SQL Server中的以下内容:如何将NVARCHAR逗号分隔列表转换为INT?

DECLARE @list nvarchar(MAX) = '1, 2, 3, 4, 5, 6'; 
SELECT * FROM table WHERE ID IN (@list); 

-- Column ID is type bigint 

错误:

Error converting data type nvarchar to bigint.

+0

可能重复的[参数化IN子句的SQL?](http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause)还是让不少类似的问题... – OzrenTkalcecKrznaric

回答

7

你不希望将其转换为一个int。相反,使用like的比较:

select * 
from table 
where ', '[email protected]+', ' 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; 
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) 
相关问题