SQL Server:如何在插入时自动编译表

问题描述:

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

例如,如果用户插入Value1,他不能插入Value2原因设置为NULL,或者如果他编译Value2,他不能插入Value1。 如果他在更新中插入Value1或Value2或者不可能,或者其他值自动设置为NULL。

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

您可以在Insert或UpdateTriggers中相应地处理这样的逻辑。 –

我会用一个检查约束:

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语句冲突与CHECK约束 “CK_Test”。

INSERT INTO Test 
VALUES 
(1,NULL,NULL) 
+0

谢谢你,它完美的作品! – Vladmyr

+0

@Vladmyr没问题,如果它适合你,你可以接受这个答案,你认为这将有助于未来的人。 –