首页 > 解决方案 > SQL Server 组件约束或多于 1 列的约束

问题描述

我想创建一个包含操作细节的表,例如:

CRAETED_ON DATETIME NOT NULL DEFAULT GETDATE(),
CREATED_BY VARCHAR(10) NOT NULL,
DELETED_ON DATETIME NULL,
DELETED_BY VARCHAR(10) NULL

我想把约束IF DELETED_ON更新然后他们应该提供DELETED_BY.

两者都应该是 NULL 或者两者都不应该是 NULL 是允许的。一个 NULL 和另一个 NOT NULL 是不允许的。

标签: sql-serverconstraints

解决方案


这可以通过表级检查约束来完成,假设您希望约束同时应用于插入和更新:

CREATE TABLE dbo.Example(
    CREATED_ON  DATETIME NOT NULL DEFAULT GETDATE(),
    CREATED_BY  VARCHAR(10) NOT NULL,
    DELETED_ON  DATETIME NULL,
    DELETED_BY  VARCHAR(10) NULL
    ,CONSTRAINT IF_DELETED_ON CHECK ((DELETED_ON IS NULL AND DELETED_BY IS NULL) OR  (DELETED_ON IS NOT NULL AND DELETED_BY IS NOT NULL))
);

推荐阅读