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