子查询返回的值多于一个

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:20:01
服务器: 消息 512,级别 16,状态 1,过程 delnum,行 5
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
运行下面时
delete from detailform where formcode='FCCPBG20080505'
符合上面的条件的记录在detailform表里大於一个时
会出现上面的消息
我在detailform 表里有一个触发器
CREATE TRIGGER [delnum] ON [dbo].[DetailForm]
FOR DELETE
AS
declare @formcode varchar(50)
set @formcode=(select formcode from deleted)
print @formcode
第5行是想得到刚删除的记录的一个字段
请高手帮忙
我想不明白的是,在deleted表里不是只保存最后一次删除的记录吗??
为什麼还会出现返回值多於一个??
谢谢楼上的回答,我把下面这句
set @formcode=(select formcode from deleted)
改成
select @formcode=formcode from deleted
问题竟然没有了
下面我又加了一句
update mainform set num=num-1 where formcode=@formcode
我的目的是,在删除detaiform表里的记录时,修改mainform里num字段的值,让他们能一置
但是现在一下删了3条记录,mainform里的num字段却只减了1
好像update 语名只运行了一次一样
能帮我想一下是什麼问题吗??

我想在你这个问题通所谓的返回值多于一个并不是记录集中记录多于一个(当然也有可能是多个)

我们先假定deleted表中只有一条记录

而是你将这条记录赋值给一个变量

这样当然不行,为了保险起见,你还是定义一个table类型的变量,用他来承载已经被删除的记录。不要用变量来接记录集。

--===============================
这个就是触发器的原理了
你删了三条记录,除非你运行3次
delete from
否则触发器只会被触发一次。
建议这种数据同步的事在删除一个表
中的数据之后马上执行SQL语句。

还有一种方法就是

update mainform set num=num-1 where formcode=@formcode
改成
update mainform set num=num-@@rowcount where formcode=@formcode
--===============================