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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 10:45   28   0

问题:在将 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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP