1
1
根据上的SQL Server文档 column constraints :
(上述内容引用自SQL Server 2017版本的文档,但一般原则也适用于所有以前的版本,并且您没有说明正在使用的版本。) 这里的重要部分是“不能引用另一个表,但可以引用 同一张桌子 对于 同一行 “(强调的是)。一张CTE就等于另一张桌子。 因此,不能有像用于check约束的cte这样的复杂查询。 就像saman建议的那样,如果要检查其他行中的现有数据,那么 必须 在数据库层,你可以作为一个触发器。 然而,触发器有其自身的缺点(例如,可发现性问题,那些不知道触发器存在的人无法预料的行为)。 正如sami在他们的评论中所建议的,另一个选择是udf,但这不是它自己的问题,根据对 this question about this approach in SQL Server 2008 . 它可能仍然适用于以后的版本。 如果可能的话,我会说通常最好将逻辑转移到应用程序层。我从你的评论中看到你已经得到了“客户端”的验证。如果在客户端和数据库服务器之间有一个应用服务器(例如在web应用中),我建议将额外的验证放在那里(在应用服务器中),而不是放在数据库中。 |