我正在尝试添加一个检查约束,如果在更新后新值(已插入)大于已存储在表中的旧值,则该约束是真实的。
例如,我有一个已经存储值 100 的“价格”列,如果更新带有 101,则可以,如果出现 99,则我的约束应该拒绝更新过程。可以使用检查约束来实现此行为,还是我应该尝试使用触发器或函数?
请就此向我提出建议...
谢谢, 米尔恰
最佳答案
检查约束无法访问列的先前值。为此,您需要使用触发器。
这种触发器的一个例子是
CREATE TRIGGER DisallowPriceDecrease
ON Products
AFTER UPDATE
AS
IF NOT UPDATE(price)
RETURN
IF EXISTS(SELECT * FROM inserted i
JOIN deleted d
ON i.primarykey = d.primarykey
AND i.price< d.price)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Prices may not be decreased', 16, 1)
END
关于sql-server - 在 Ms Sql Server 2005 中检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595712/