更新触发问题的更新
问题描述:
我的名字有一个表上的触发器:[OfficeAutomation_Letter]每行更新另一个时间 更新的表我 但是,当更新命令我跑两行 会触发一个错误 我需要解释的过道中的每一行如何发展更新触发问题的更新
我的触发是:
ALTER TRIGGER [dbo].[Letter_UPD] ON [dbo].[OfficeAutomation_Letter]
FOR UPDATE
AS
Declare @LetterID int
SELECT @LetterID = ID From Inserted
BEGIN
UPDATE OfficeAutomation_TempLetter
SET Archived = (Select Archive From Inserted),
OriginalNumber = (Select OriginalNumber From Inserted)
WHERE LetterID = @LetterID
END
更新我的命令是:
update OfficeAutomation_Letter set OriginalNumber=100 where ID in (3,4)
访问的错误是:
Subquery returned more than 1 value. This is not permitted when
the subquery follows =, !=, <, <= , >, >= or when the subquery
is used as an expression.
答
触发器每行每声明运行一次,不是一次,inserted和deleted表中的伪包含所有受影响的行。
ALTER TRIGGER [dbo].[Letter_UPD] ON [dbo].[OfficeAutomation_Letter]
FOR UPDATE
AS
UPDATE otl
SET Archived = i.Archive,
OriginalNumber = i.OriginalNumber
FROM
OfficeAutomation_TempLetter otl
inner join
inserted i
on
otl.LetterID = i.ID
所以,在你原来的触发,我们有:?
SELECT @LetterID = ID From Inserted
这是要分配受影响的行中的一个(谁知道哪一个,的ID - 这是没有定义)
然后
SET Archived = (Select Archive From Inserted),
OriginalNumber = (Select OriginalNumber From Inserted)
这是实际您看到错误的原因,因为右侧的选择将返回多行。
谢谢 正确 – Ehsan 2011-04-20 08:44:30