我需要将字符串转换为整数,但是我遇到了类型错误。
declare @stringinteger nvarchar(255) null;
set @stringinteger='1,2,3,4'
select *
from user
where id in (@stringinteger)
我得到的错误:
将nvarchar值'1,2,3,4'转换为数据类型int
时转换失败
答案 0 :(得分:3)
您有两种方法可以处理此问题,即动态SQL并拆分字符串。
对于后者,您可以使用string_split()
(在SQL Server 2016中引入)或类似的功能(它们都在网络上,谷歌“字符串拆分sql服务器”):
select *
from user
where id in (select cast(value as int) from string_split(@stringinteger, ',')) ;
动态SQL看起来像:
declare @stringinteger nvarchar(255) null;
set @stringinteger = '1,2,3,4';
declare @sql nvarchar(max);
set 'select *
from user
where id in (@stringinteger)';
set @sql = replace(@sql, '@stringinteger', @stringinteger);
exec sp_executesql @sql;
请注意,在SQL Server中,应始终为字符类型提供长度。如果您将其删除,则默认值因上下文而异 - 您的代码可能无法达到预期效果。