CREATE TRIGGER [DBO] .upd_PaymentData ON dbo.Receipt
插入,更新,删除
AS
IF @@ ROWCOUNT = 0返回
SET NOCOUNT上;
DECLARE @actionTable为nvarchar(10),
@insCount int = (SELECT COUNT(*) FROM inserted),
@delCount int = (SELECT COUNT(*) FROM deleted)
SELECT @actionTable = CASE WHEN @insCount> @delCount THEN '插入'
WHEN @insCount < @delCount THEN 'deleted' ELSE 'updated' END
IF @actionTable IN( '插入', '更新')
BEGIN
;WITH cte AS
(
SELECT r.Customerid, SUM(r.Paid) AS NewTotalPaid,<strike> r.paymentDate</strike>
FROM dbo.Receipt r
WHERE r.Customerid IN (SELECT i.Customerid FROM inserted i)
GROUP BY r.Customerid
)
UPDATE p
SET p.Totalpaid = c.NewTotalPaid
<strike>SET p.lastpaymentDate = c.paymentDate</strike>
FROM dbo.PaymentData p JOIN cte c ON p.Customerid = c.Customerid
END
ELSE
BEGIN
;WITH cte AS
(
SELECT d.Customerid, SUM(ISNULL(r.Paid, 0)) AS NewTotalPaid
FROM deleted d LEFT JOIN dbo.Receipt r ON d.Customerid = r.Customerid
GROUP BY d.Customerid
)
UPDATE p
SET p.Totalpaid = c.NewTotalPaid
FROM dbo.PaymentData p JOIN cte c ON p.Customerid = c.Customerid
END
我试图更functionaly添加为内
踏歌
表示,但它给错误,无法正常工作。 只需在两个表中添加一个字段。 付款数据添加lastpaymentdate 并在收到添加付款日期 上插入或更新收据表paymentdata.lastpaymentdate也应更新至receipt.paymentdate。谢谢
要了解如何在此提问,请点击此链接(http://mattgemmell.com/2008/12/08/what-have-you-tried/)。 – 2013-03-18 10:20:58
当从数据库中选择'SELECT'并/或创建一个索引视图来自动保存这些信息时,通常最好只计算'SUM()'。远远好于编写一个脆弱的触发器,可能(或可能不)由于嵌套等原因而被禁用或不适用。 – 2013-03-18 10:55:12