Mur*_*HAN 2 sql t-sql sql-server ssms
我需要将字符串转换为整数,但出现类型错误。
declare @stringinteger nvarchar(255) null;
set @stringinteger='1,2,3,4'
select *
from user
where id in (@stringinteger)
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
将 nvarchar 值“1,2,3,4”转换为数据类型 int 时转换失败
有两种方法可以处理这个问题:动态 SQL 和分割字符串。
对于后者,您可以使用string_split()(在 SQL Server 2016 中引入)或类似的函数(它们遍布网络,google“string split sql server”):
select *
from user
where id in (select cast(value as int) from string_split(@stringinteger, ',')) ;
Run Code Online (Sandbox Code Playgroud)
动态 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;
Run Code Online (Sandbox Code Playgroud)
请注意,在 SQL Server 中,您应该始终提供字符类型的长度。如果您忽略它,则默认值会因上下文而异 - 并且您的代码可能不会执行您所期望的操作。