error:512 severity:16 state:1 触发器 错误总结

  SQL SERVER数据库问题,错误描述:Subquery returned more than 1 value. This is illegal when the subquery follows =, !=, <, <= , >, >=, or when the subquery is used as an expression.子查询返回的值多于一个,在用一些操作符或用做表达式时是不允许的。

错误很明显,无非就是把操作符换成 in 就解决问题。

理论上是这样,但现实是残酷的,依然不行,这就郁闷了,找了半天,SQL事件探查器搞了半天,也用上,确实是发生在删除时触发器上出的错,不应该啊,最后找到执行出错的sql语句,在查询分析器中执行,终于找到了真凶。。。。。

是触发器的问题,这个触发器执行时又触发了另一个触发器,错误根源在这,改成in解决。

但是还有个问题,如我在删除用户时,触发器执行删除所有物品,delete product where pid = (select userid from deleted),子查询返回肯定是唯一的啊;而在物品删除中,触发删除所有物品的留言,delete 物品留言表 where id = (select pid from deleted) ,也是唯一的。按理说,删除一个用户,触发器中获取它的id,根据这个id删除它的所有物品,这样删除一个物品时,再由物品id删除留言,都应该是正常的啊。

但是它却不正常,估计是我们删除一个用户时,连带删除这个用户的多个物品这个操作时,是删除的所有的物品,填充了deleted表之后,才触发触发器,而不是删除一个物品,填充一次deleted表,触发一次。这样才造成删除物品留言时的error:512错误。。。。。。。

清静多了。。。。。。。。

 

 

posted @ 2009-12-30 11:48  for certain  阅读(773)  评论(0编辑  收藏  举报