我有这两张表
Table: Guards
ID int Name varchar Rank int
Table: Squads
SquadId Leader SquadName
该Leader列指向表中的ID列,Guard我正在尝试创建一个约束,以检查Rank链接到作为领导者提供的保护ID的列是否为特定值(在本例中为1)
Leader
ID
Guard
Rank
这可能吗?还是我必须使用扳机?
您需要添加一个CHECK约束。我将约束包装到一个函数中,因为您需要检查另一个表的值。
CHECK
CREATE FUNCTION CheckLeaderRank (@LeaderID INTEGER) RETURNS INTEGER AS BEGIN DECLARE @value INTEGER; DECLARE @MinimumRank INTEGER = 3; SET @value = CASE WHEN (SELECT RANK FROM Guards WITH(NOLOCK) WHERE Id = @LeaderID) >= @MinimumRank THEN 1 ELSE 0 END RETURN @value END
该函数将检查防护等级Rank是否足够高:请确保将其设置@MinimumRank为适当的值,或者甚至更好地从另一个表中获取它。
@MinimumRank
现在将约束添加到Squads表中。
Squads
ALTER TABLE Squads ADD CONSTRAINT chk_rank CHECK (dbo.CheckLeaderRank(i) = 1)