常州网络公司首页 >>> 数据库 >> MSSQL

用delete in时,同时删除多条记录时出错

发布时间:2009-7-21 8:58:44   浏览次数:6856

今天突然下面编辑说,删除信息时,出错了。怎么回事,昨天还可以删除的呢。我想也是的啊,我没动程序,不可能删除出错的啊,查服务器也没有被黑的现象。就把删除的SQL语句直接放到查询分析器里运行。

delete from UserTable where id in(2,3,4,5)

出现错误提示


服务器: 消息 512,级别 16,状态 1,过程 UserTable,行 18
子查询返回的值多于一个。当子查询跟随在 =、!=、 <、 <=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。

我就感觉怪了,一个delete语句,怎么会有什么子查询?我原来程序都可以运行的,今天怎么就出错了呢。

到CSDN上问了一下,他们说是有触发器的问题,我突然想到,我刚加上了触发器,所以立即去查触发器。最后终于解决了。下面说一下原因。


我在 tablename上建立了个delete的触发器:

Create Trigger feedbackNum
on feedback
for insert,delete
as
begin
  update InformationTotal set fNumber=fNumber-1 where gsid = (select gsid from deleted)

end
go

就是当删除一条记录时,会在InformationTotal 表中统计一下某个会员发布的信息条数,但是,当一次性删除多条时,select gsid from deleted就是一个记录集,所以不能直接用“=”,应当改成 “in”。最终修改如下:

Create Trigger feedbackNum
on feedback
for insert,delete
as
begin
  update InformationTotal set fNumber=fNumber-1 where gsid in (select gsid from deleted)

end
go

问题解决了。

上一条:SQL 防止注入最简单的方法
下一条:SQL中,如果何用触发器
首页 | 在线留言 | 网站地图

CopyRight ©2008-2014   糊涂蛋技术网    苏ICP备05013073号
站长:万创   QQ:54960248  E-mail:xlxcn#126.com