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

Sql 如何将NVARCHAR逗号分隔列表转换为INT?,sql,sql-server,casting,type-conversion,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时出错 您不想将其转换为整数。相反,请使用like进行比较: select * from table where ', '+@list+', ' li

在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时出错


您不想将其转换为整数。相反,请使用
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;

您不想将其转换为整数。相反,请使用
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;

使用
动态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)

使用
动态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)
可能重复的或如此多的类似问题…可能重复的或如此多的类似问题。。。