2013-06-02 52 views
-2

我有这触发我想让它允许多个行更新,目前它只能处理单行update.when我更新的记录,它说,子查询返回多于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 [email protected] 
    END 
END 
+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是一个字符串?这是要求。

+0

谢谢它的作品。谢谢你,朋友。 –

1

最简单的方法是使用更新语句,如触发器中的更新语句。

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

注意我没有在我面前SQL服务器,这样的语法可能不是100%正确的,但,让你的总体思路。

在一般情况下,我尝试并避免触发器,但如果您确实需要触发器然后使用它,但可能通过使用存储过程来解决此问题。

+0

这不能解决问题。仍然错误是一样的。 –