我有这个触发器我想让它允许多行更新,目前它只处理单行更新。当我更新记录时,它说子查询返回的值超过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
答案 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%正确,但这可以为您提供一般的想法。
一般情况下,我尝试避免使用触发器但是如果你真的需要触发器然后使用它,但是可以通过使用存储过程来解决这个问题。