我想在同一张表中的两列(程序代码和测试代码)之间建立一对一的关系。我希望所有具有相同测试代码的测试都具有相同的程序代码。
我的第一个想法是使用 UDF 来查找相同测试代码对应于两个不同程序的情况。我了解到这将不起作用,因为 t-sql 仅在之后检查 UDF 的检查约束
INSERTS
——而不是在UPDATES
为什么 t-sql 允许我违反使用 UDP 的检查约束之后?我的下一个想法是将逻辑从 UDF 移到检查约束本身。但是 t-sql 是说检查约束中不允许子查询。这也意味着我不能使用
EXISTS
语法(我认为它也使用子查询)。ALTER TABLE [dbo].[mytable] WITH CHECK ADD CONSTRAINT [oneProgramPerTest] CHECK
( (select COUNT(*) from mydb.dbo.mytable u1 inner join mydb.dbo.mytable u2 on u1.testcode=u2.testcode and u1.progcode <> u2.progcode )=0 )
除非有某种方法可以在没有 (1) udf 或 (2) 子查询的情况下强制执行此逻辑,否则似乎我需要创建一个程序代码的“虚拟”表,然后在测试代码之间强制执行一对一的关系来自 myTable 和虚拟表。这看起来真的很难看,所以必须有更好的方法。对?