如果不存储其他列,则无法存储列

时间:2013-11-27 08:42:59

标签: sql sql-server

我的表格ServiceTask包含servicenotasknotime_spentmechaniccode列。

servicenotaskno是PK,机制代码是对Mechanic表的FK引用 假设当我插入数据时,机械码存在于表Mechanic

实施例:

INSERT INTO ServiceTask VALUES('0001','0002',3,NULL)

它应该是错误的,因为mechaniccode是NULL。

如何在T-SQL中执行此操作:

  

对于每个服务任务,如果不存储机制,则无法存储所花费的时间

请帮帮我。

感谢。

2 个答案:

答案 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)

假设您的数据类型,可空性以及您不需要对servicenotaskno执行任何操作,您可以添加检查约束,以检查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是否允许空值。