小编Ben*_*Ben的帖子

MSSQL:避免CHECK约束的Update语句

在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)

sql constraints sql-server-2000

4
推荐指数
1
解决办法
3111
查看次数

标签 统计

constraints ×1

sql ×1

sql-server-2000 ×1