更新触发问题的更新

问题描述:

我的名字有一个表上的触发器:[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) 

这是实际您看到错误的原因,因为右侧的选择将返回多行。

+0

谢谢 正确 – Ehsan 2011-04-20 08:44:30