SQL Server:如何在insert中自动编译表

时间:2017-06-12 11:13:19

标签: sql sql-server

如何在以下情况下自动编译表:用户正在插入或修改某列中的数据,如果他这样做,则另一列无法或设置为NULL。

例如,如果用户插入Value1,则无法插入Value2 cause被设置为NULL,或者如果他编译Value2,则无法插入Value1。 如果他在更新中插入Value1或Value2,或者不可能,或者另一个值自动设置为NULL。

   Value  Value1  Value2
     1     'abc'   NULL
     2     NULL    'cde'
     3     NULL    'fgh'

1 个答案:

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