跨表的SQL Server约束

时间:2010-05-05 20:07:35

标签: sql-server constraints check-constraints

我有一个SQL Server数据库,其中包含Apartment表(列FloorNumBuildingID)和ApartmentBuilding表(列NumFloors) 。有没有办法设置约束(使用SQL Server用户界面)来检查Apartment.FloorNum是否大于ApartmentBuilding.NumFloors

我试过了:

FloorNum > ApartmentBuilding.NumFloors

但现在我意识到我不得不加入BuildingID上的列,但我不知道如何在约束中这样做。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您不能使用CHECK CONSTRAINT执行此操作,因为它需要来自另一个表的数据。您可以使用INSERT/UPDATE trigger来处理此问题。

答案 1 :(得分:0)

  1. 在ApartmentBuilding表中,在(BuildingID,NumFloors)
  2. 上添加UNIQUE约束
  3. 在公寓表中,添加列NumFloorsInBuilding
  4. 在公寓表中,在(BuildingID,NumFloorsInBuilding)上添加外键(BuildingID,NumFloors)。这可以保证NumFloorsInBuilding始终等于父表中的NumFloors。
  5. 在公寓表中,添加CHECK(FloorNum< NumFloorsInBuilding)