查詢是 - 沒有用戶應該能夠更改產品表的價格。 msg將被顯示給用戶。所有試圖改變價格的嘗試都應該保存在臨時表中。保存更新在更新觸發器中的臨時表中的嘗試
如何解決這個問題在Sql server 2005中使用更新觸發器? 我試過如下。它按預期工作,但也顯示錯誤 -
事務在觸發器中結束。該批次已被中止。
ALTER TRIGGER tr_Products_U ON dbo.ProductDemo AFTER UPDATE
AS
DECLARE @Data VARCHAR(200),
@sProductName NVARCHAR(40),
@mOldPrice MONEY,
@mNewPrice MONEY,
@ProductId int
IF UPDATE(ListPrice)
BEGIN
SELECT
@ProductId = d.ProductID,
@sProductName = d.Name,
@mOldPrice = d.ListPrice,
@mNewPrice = i.ListPrice
FROM
inserted i INNER JOIN deleted d ON i.ProductID = d.ProductID
SET @Data = 'Tried to update the price of ' + @sProductName
+ ' [ProductID :' + CONVERT(VARCHAR(10), @ProductId) + '] '
+ ' from '
+ CONVERT(VARCHAR(10), @mOldPrice)
+ ' to ' + CONVERT(VARCHAR(10), @mNewPrice)
print 'Can''t Change Price'
ROLLBACK TRAN
INSERT INTO #UpdateLIstPrices
VALUES (@Data);
END
RETURN
GO
在[@bobs答案](http://stackoverflow.com/questions/3615951/save-update-attempts-in-temp-table-in-update-trigger/3621726#3621726),他是對於您嘗試記錄價格變化的問題絕對正確。我冒昧將他的修補程序納入上面的代碼中。 – 2010-09-01 20:29:49