【发布时间】:2010-09-01 07:43:08
【问题描述】:
查询是 - 任何用户都不能更改产品表的价格。应向用户显示一条消息。所有更改价格的尝试都应保存在临时表中。
如何在 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
【问题讨论】:
标签: sql-server sql-server-2005 triggers