【发布时间】:2019-12-04 10:00:27
【问题描述】:
CREATE TABLE Calendar (
id_calendar INT IDENTITY(1,1) PRIMARY KEY,
year int NOT NULL,
month int NULL,
day_of_month int NULL,
day_of_week int NULL,
week_of_year int NULL
);
CREATE TABLE Param(
id_param INT IDENTITY(1,1) PRIMARY KEY,
param varchar(30),
periode varchar(20),
CONSTRAINT check_periode CHECK (periode IN ('Day','Week','Month','Year'))
);
CREATE TABLE Event (
id_calendar INT,
id_param INT
);
每当将新行插入事件时,我想检查它是否符合参数的周期。
如果 periode = 'Day',则 year,month,day_of_month,day_of_week,week_of_year 都不应该为 NULL。
如果 periode = 'Week',那么只有 day_of_month 和 day_of_week 应该为 NULL,
...
所以我需要同时加入FK'S 并从那里建立一个 CHECK 约束。是否可以将 id_calendar 和 id_param 传递给 UDF 并从 CHECK 调用它?
出于性能原因,我不想使用全局查询,只想使用涉及受影响行及其外键的检查。
【问题讨论】:
-
您可以使用带有
ROLLBACK命令的AFTER INSERT触发器,如果您的某些条件不满足,则执行该命令。有关更多信息,请参阅此答案:stackoverflow.com/a/13374004/1220550
标签: sql sql-server join case check-constraints