我的表格ServiceTask
包含serviceno
,taskno
,time_spent
和mechaniccode
列。
serviceno
和taskno
是PK,机制代码是对Mechanic
表的FK引用
假设当我插入数据时,机械码存在于表Mechanic
实施例:
INSERT INTO ServiceTask VALUES('0001','0002',3,NULL)
它应该是错误的,因为mechaniccode
是NULL。
如何在T-SQL中执行此操作:
对于每个服务任务,如果不存储机制,则无法存储所花费的时间
请帮帮我。
感谢。
答案 0 :(得分:0)
也许你想添加一个约束:
ALTER TABLE ServiceTask
ADD CONSTRAINT CheckOnlyTimespentWithMechanic
CHECK (
(CASE WHEN time_spent IS NOT NULL AND mechaniccode IS NULL
THEN 0 ELSE 1 END
) = 1)
GO
INSERT INTO ServiceTask VALUES(1,2,NULL,1) -- allowed
INSERT INTO ServiceTask VALUES(1,2,3,NULL) -- not allowded
结果:
架构创建失败:INSERT语句与CHECK冲突 约束“CheckOnlyTimespentWithMechanic”。冲突发生在 数据库“db_6_2319a”,表“dbo.ServiceTask”。:
答案 1 :(得分:0)
假设您的数据类型,可空性以及您不需要对serviceno
或taskno
执行任何操作,您可以添加检查约束,以检查time_spent
是否为空或0,或如果time_spent
大于0,则填充该机制:
ALTER TABLE ServiceTask
ADD CONSTRAINT chk_mechanic CHECK
(time_spent IS NULL
OR time_spent = 0
OR (time_spent > 0 AND mechaniccode IS NOT NULL))
您可能不需要所有这些检查,具体取决于time_spent
是否允许空值。