在MS2000中工作,我有一个名为JobOwners的表,它将Jobs(JPSID)映射到拥有它们的Employees(EmpID).它还包含他们开始拥有该作业的日期(DateStarted),他们停止拥有该作业的日期(DateEnded)以及所有权是否处于活动状态(IsActive).看起来像这样.
CREATE TABLE JobOwners
(
LogID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
JPSID int NOT NULL FOREIGN KEY REFERENCES JobsPerShift(JPSID),
EmpID int NOT NULL FOREIGN KEY REFERENCES Employees(EmpID),
DateStarted datetime,
DateEnded datetime,
IsActive tinyint NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
应该没有活动的JPSID重复项,尽管非活动重复项应该没问题.通过一些研究,我发现我可以使用CHECK约束上的函数来完成此操作.
CREATE FUNCTION CheckActiveCount(@JPSID INT)
RETURNS INT AS
BEGIN
DECLARE @result INT
SELECT @result = COUNT(*) FROM JobOwners WHERE JPSID = @JPSID AND IsActive = 1
RETURN @result
END
GO
ALTER TABLE JobOwners
ADD CONSTRAINT CK_JobOwners_IsActive
CHECK ((IsActive = 1 AND dbo.CheckActiveCount(JPSID) <= …Run Code Online (Sandbox Code Playgroud)