触发允许多次更新

时间:2013-06-02 11:54:11

标签: sql sql-server triggers

我有这个触发器我想让它允许多行更新,目前它只处理单行更新。当我更新记录时,它说子查询返回的值超过1 ..

   GO
    ALTER TRIGGER [dbo].[OnReceiptUpdate]
    ON  [dbo].[paymentReceipt]
    AFTER UPDATE 
    AS 
    BEGIN   
    SET NOCOUNT ON;
    Declare   @correctdate VARCHAR(19);
   Declare   @receiptNo VARCHAR(50);
DECLARE @customerID NCHAR(50)
SET @customerID= (SELECT customerID FROM inserted)
 set @correctdate =  (SELECT CONVERT(VARCHAR(19),paymentDate,103) FROM inserted)   
  set @receiptNo =  (SELECT receiptNo FROM inserted)      
   BEGIN

   UPDATE Paymentreceipt
       SET paymentDate = @correctdate 
    WHERE customerID = @customerID and receiptNo=@receiptNo  
   END
 END

2 个答案:

答案 0 :(得分:2)

Update p
Set p.paymentDate = CONVERT(VARCHAR(19),i.paymentDate,103)
From Paymentreceipt p
inner join inserted i
On p.customerID = i.customerID and p.receiptNo = i.receiptNo
我认为应该这样做。

PS为什么p.paymentdate是一个字符串?那就是要求它。

答案 1 :(得分:1)

最简单的方法是在触发器中使用下面的更新语句。

UPDATE Paymentreceipt
SET paymentDate = CONVERT(VARCHAR(19),paymentDate,103)
FROM inserted
WHERE Inserted.receiptNo  = Paymentreceipt.receiptNo
AND Inserted.customerID  = Paymentreceipt.customerID  

注意我面前没有SQL服务器,因此语法可能不是100%正确,但这可以为您提供一般的想法。

一般情况下,我尝试避免使用触发器但是如果你真的需要触发器然后使用它,但是可以通过使用存储过程来解决这个问题。