sql-server - 在 Ms Sql Server 2005 中检查约束

标签 sql-server sql-server-2005 triggers constraints

我正在尝试添加一个检查约束,如果在更新后新值(已插入)大于已存储在表中的旧值,则该约束是真实的。

例如,我有一个已经存储值 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/

相关文章:

mysql - 在 mysql 中替换 count(*) OVER ()

sql - 在 SQL Server 中,按日期排序不按降序显示所有日期

sql - 在 SQL Server 上的特定位置添加列?

c# - 在运行时为 ssrs 动态创建参数

sql - 存储过程和触发器

mysql - 如何在sql中创建触发器

sql - 如何在该触发器中找到已调用触发器的 sql 语句的 audsid、sql_id

SQL 查询在链接服务器上给出错误结果

sql-server - ASP.NET 核心标识 - 默认情况下,为什么数据库主键定义为 "nvarchar"而不是 "UniqueIdentifier"?

sql studio express 2005丢失sa密码问题