如何在以下情况下自动编译表:用户正在插入或修改某列中的数据,如果他这样做,则另一列无法或设置为NULL。
例如,如果用户插入Value1,则无法插入Value2 cause被设置为NULL,或者如果他编译Value2,则无法插入Value1。 如果他在更新中插入Value1或Value2,或者不可能,或者另一个值自动设置为NULL。
Value Value1 Value2
1 'abc' NULL
2 NULL 'cde'
3 NULL 'fgh'
答案 0 :(得分:1)
我会使用检查约束:
CREATE TABLE [dbo].[Test](
[Value] [int] NOT NULL,
[value1] [int] NULL,
[Value2] [int] NULL
)
ALTER TABLE [dbo].[Test] WITH CHECK
ADD CONSTRAINT [CK_Test] CHECK
(([Value1] IS NOT NULL AND [Value2] IS NULL OR
[Value1] IS NULL AND [Value2] IS NOT NULL))
以下插入的结果是:
失败:INSERT语句与CHECK约束“CK_Test”冲突。
INSERT INTO Test
VALUES
(1,1,1)
<强>成功:强>
INSERT INTO Test
VALUES
(1,NULL,1)
<强>成功:强>
INSERT INTO Test
VALUES
(1,1,NULL)
失败:INSERT语句与CHECK约束“CK_Test”冲突。
INSERT INTO Test
VALUES
(1,NULL,NULL)