Sql Server存储过程更新数据问题

xiaoniaodewen 2010-11-01 12:01:45
如下可以执行:
declare @idforpagelist nvarchar(100)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

update tblComplainedUser set AuditStatus=@AuditStatus where idforpage in(1,2,3)

如下无法执行,提示“将数据类型 nvarchar 转换为 bigint 时出错。”,请问如何解决?谢谢。declare @idforpagelist nvarchar(100)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

update tblComplainedUser set AuditStatus=@AuditStatus where idforpage in(@idforpagelist)


谢谢。

...全文
184 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond_me21 2010-11-01
  • 打赏
  • 举报
回复

declare @idforpagelist nvarchar(100)
declare @strSQL NVARCHAR(800)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

SET strSQL='update tblComplainedUser set AuditStatus='+@AuditStatus+' where idforpage in('+@idforpagelist+')'
EXEC SP_EXECUTESQL @strSQL
beyond_me21 2010-11-01
  • 打赏
  • 举报
回复

declare @idforpagelist nvarchar(100)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

update tblComplainedUser set AuditStatus=@AuditStatus where idforpage in(1,2,3)

declare @idforpagelist nvarchar(100)
declare @strSQL NVARCHAR(800)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

SET strSQL='update tblComplainedUser set AuditStatus='+@AuditStatus+' where idforpage in('+@idforpagelist+')'
EXEC SP_EXECUTESQL @strSQL
吴青峰 2010-11-01
  • 打赏
  • 举报
回复
除非你把数据库的idforpage字段也改为nvarchar(100)数据类型。
吴青峰 2010-11-01
  • 打赏
  • 举报
回复
update tblComplainedUser set AuditStatus=@AuditStatus where idforpage in(1,2,3)直接这样试试,因为你idforpage是int类型,而你set @idforpagelist ='1,2,3'是字符串,肯定会报这个错了!
xiaoniaodewen 2010-11-01
  • 打赏
  • 举报
回复
declare @idforpagelist nvarchar(100)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

update tblComplainedUser set AuditStatus=@AuditStatus where idforpage in(@idforpagelist)

使用条件in(1,2,3)可以更新数据,但使用参数条件in(@idforpagelist)却报错,提示“将数据类型 nvarchar 转换为 bigint 时出错。”


路伊阑珊 2010-11-01
  • 打赏
  • 举报
回复
具体要解决什么问题
dfdkffig 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xiaoniaodewen 的回复:]

我把
declare @AuditStatus int
改为
declare @AuditStatus NVARCHAR(10)

测试通过。

啥原因呢?事实上AuditStatus是int类型字段。
[/Quote]


因为 你的 + 号 sql 首先会认为是加减运算符 所以就报错了

这个地方就应该把 @AuditStatus 设为 nvarchar(10)类型
xiaoniaodewen 2010-11-01
  • 打赏
  • 举报
回复
我把
declare @AuditStatus int
改为
declare @AuditStatus NVARCHAR(10)

测试通过。

啥原因呢?事实上AuditStatus是int类型字段。
beyond_me21 2010-11-01
  • 打赏
  • 举报
回复


declare @idforpagelist nvarchar(100)
declare @strSQL NVARCHAR(800)
declare @AuditStatus varchar(50)

set @AuditStatus='1'
set @idforpagelist ='1,2,3'

SET strSQL='update tblComplainedUser set AuditStatus='+@AuditStatus+' where idforpage in('+@idforpagelist+')'
EXEC SP_EXECUTESQL @strSQL
beyond_me21 2010-11-01
  • 打赏
  • 举报
回复
更正一下

declare @idforpagelist nvarchar(100)
declare @strSQL NVARCHAR(800)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

SET strSQL='update tblComplainedUser set AuditStatus='+cast(@AuditStatus as varchar(50))+' where idforpage in('+@idforpagelist+')'
EXEC SP_EXECUTESQL @strSQL
xiaoniaodewen 2010-11-01
  • 打赏
  • 举报
回复
我用的是Sql Server2000,在Sql 查询分析器中测试。
xiaoniaodewen 2010-11-01
  • 打赏
  • 举报
回复
谢谢!

beyond_me21,您的代码提示“将 varchar 值 'update tblComplainedUser set AuditStatus=' 转换为数据类型为 int 的列时发生语法错误。”

declare @idforpagelist nvarchar(100)
declare @strSQL NVARCHAR(800)
declare @AuditStatus int

set @AuditStatus=1
set @idforpagelist ='1,2,3'

SET @strSQL='update tblComplainedUser set AuditStatus='+@AuditStatus+' where idforpage in('+@idforpagelist+')'
EXEC SP_EXECUTESQL @strSQL

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧