Sql server 替换引用其他行的检查约束

Sql server 替换引用其他行的检查约束,sql-server,tsql,Sql Server,Tsql,我的印象是CHECK()约束可能只引用同一行中的值。我正试图弄清楚,那么,我该如何执行以下规则: 鉴于下表: PK_Employee_ID | Employee_Name | Manager_ID 其中,Manager ID是表中另一个员工的ID。我需要一个规则,如果给定行的PK_Employee_ID在另一行的Manager_ID中被引用,那么它自己的Manager_ID必须为null。即: 不是每个员工都需要一个经理,但是 作为另一名员工经理的员工可能没有经理 我知道还有其他方法可以解决这

我的印象是CHECK()约束可能只引用同一行中的值。我正试图弄清楚,那么,我该如何执行以下规则:

鉴于下表:

PK_Employee_ID | Employee_Name | Manager_ID
其中,Manager ID是表中另一个员工的ID。我需要一个规则,如果给定行的PK_Employee_ID在另一行的Manager_ID中被引用,那么它自己的Manager_ID必须为null。即:

不是每个员工都需要一个经理,但是 作为另一名员工经理的员工可能没有经理


我知道还有其他方法可以解决这个问题;可能还有另一个简单的“is_Manager”位列,如果为1,则表示Manager_ID必须为null。然而,我更喜欢更优雅的解决方案,而不是明确地告诉每一行他们是否是经理,让他们自己通过查看其他行来找出答案。这将使更改给定行之间的关系更加容易。或者,这是一个处理问题的非常低效的方法吗?

你可以考虑使用触发器吗?我讨厌触发器,但这是一个最有用的例子。强制引用完整性。你能详细解释一下为什么你不喜欢它们吗?他们只是很难相处,还是表现得很慢?你会怎么做?很多人不喜欢触发器,因为它们很容易忘记(从而产生“意外”的结果),并且很难调试,如果写得不好,还会导致性能问题。您可能不应该将它们用于任何繁重的业务逻辑,但对于这样相对简单的数据验证,我将继续构建一个触发器,用于插入和更新以执行检查。感谢您提供的信息!我会进一步调查的。