何时评估检查约束?

MrZ*_*der 5 sql-server check-constraints

我有一张记录表

ID
EntityID 
Value
Status
Run Code Online (Sandbox Code Playgroud)

和实体表

ID
Col1
Col2
CurrentRecordID
Run Code Online (Sandbox Code Playgroud)

CurrentRecordID应的Record绑在EntityStatus0

我有表两个检查约束之一Entity是检查,以确保CurrentRecordID实际上是对当前记录,一个Record是检查,以确保,如果它具有为0的状态,它EntityIDCurrentRecordID它的ID相符。

所以本质上,这两个检查约束做同样的事情,但分别在每个表上

检查约束是在事务的最后运行还是在表上每次插入/更新后像触发器一样运行?

如果它们在每次修改后运行,这两个约束是否会相互冲突(意味着,约束将在下一个表有机会更新其值之前抛出错误)。

这是运行以插入新记录并将其设置为给定实体的当前查询的示例

UPDATE Record SET Status = 1 WHERE Status = 0 AND EntityID = @EntityID
INSERT INTO Record(EntityID, Value, Status) VALUES(@EntityID, 100, 0)
DECLARE @RecordID INT = @@IDENTITY
UPDATE Entity SET CurrentRecordID = RecordID WHERE ID = @EntityID
Run Code Online (Sandbox Code Playgroud)

Sea*_*nge 5

约束并不像触发器一样运行。他们在更改数据之前评估规则。

当尝试更改数据时会发生约束检查。如果对 Table1 的尝试更改未通过检查约束,则会出现异常。