SQL SERVER 在将 nvarchar 值转换成数据类型 int 时失败

问题:在将 nvarchar 值转换成数据类型 int 时失败


创建一个存储过程:

备注:ID为Users表的主键int类型

create proc UpdateOnlineStatus(@users nvarchar(500))
as
begin
declare @IDS nvarchar(500)
set @IDS=replace(replace(@users,' ',''),'|',',')
update [Users] set [status]=1 where ID in(@IDS);
update [Users] set [status]=0 where ID not in(@IDS);
end

运行:exec '1|2|3|4'的时候就会报 “在将 nvarchar 值 ‘1,2,3,4’ 转换成数据类型 int 时失败”  这个错误。

其中一个解决办法是运用exec()来执行字符串SQL语句:

代码如下:

create proc [dbo].[UpdateOnlineStatus2](@users nvarchar(500))
as
begin
declare @IDS nvarchar(500)
declare @sql1 nvarchar(1000)
declare @sql2 nvarchar(1000)
set @IDS=replace(replace(@users,' ',''),'|',''',''')
set @sql1='update [Users] set [status]=1 where cast(ID as nvarchar(500)) in('''+@IDS+''')'
set @sql2='update [Users] set [status]=0 where cast(ID as nvarchar(500)) not in('''+@IDS+''')'
exec(@sql1)
exec(@sql2)
end


法二:

create proc [dbo].[UpdateOnlineStatus2](@users nvarchar(500))
as
begin
declare @IDS nvarchar(500)
declare @ID int
set @IDS=@users+'|'
update [Users] set [status]=0;
while(charindex('|',@IDS)>0)
begin
set @ID=SUBSTRING(@IDS,1,charindex('|',@IDS)-1)
select @IDS=SUBSTRING(@IDS,charindex('|',@IDS)+1,LEN(@IDS))
--print @ID;
update [Users] set [status]=1 where ID=@ID;
end
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值