查询是 - 没有用户应该能够更改产品表的价格。 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