创建 check 约束

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

可以使用 SQL Server Management Studio 或 Transact-SQL 在表中创建检查约束,以指定 SQL Server 的一个或多个列中可接受的数据值。 要详细了解如何添加列约束,请参阅 ALTER TABLE column_constraint

有关详细信息,请参阅 Unique 约束和 check 约束

备注

若要查询现有的检查约束,请使用 sys.check_constraints 系统目录视图。

权限

需要具有表的 ALTER 权限。

使用 SQL Server Management Studio

  1. 在“对象资源管理器”中,展开要为其添加检查约束的表,右键单击“约束”,然后选择“新建约束” 。

  2. 在“检查约束”对话框中,选择“表达式”字段,然后选择省略号 (…) 。

  3. “CHECK 约束表达式” 对话框中,键入 CHECK 约束的 SQL 表达式。 例如,若要将 SellEndDate 表的 Product 列中的条目限制为大于等于 SellStartDate 列中的日期的值,或者为 NULL 值,则键入:

    SellEndDate >= SellStartDate
    

    或者,如果要求 zip 列中的项为 5 位数,请键入:

    zip LIKE '[0-9][0-9][0-9][0-9][0-9]'
    

    注意

    确保将任何非数字约束值包含在单引号 (') 中。

  4. 选择“确定”

  5. “标识”类别中,您可以更改 CHECK 约束的名称并且为该约束添加说明(扩展属性)。

  6. “表设计器” 类别中,您可以设置何时强制约束。

    操作 从下列选项中选择 Yes
    对在创建约束前存在的数据测试约束 在创建或启用时检查现有数据
    在此表上发生复制操作时强制约束 强制用于复制
    在此表中插入或更新行时强制约束 强制用于 INSERT 和 UPDATE
  7. 选择“关闭”。

使用 Transact-SQL

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    首先,创建约束。

    ALTER TABLE dbo.DocExc
    ADD ColumnD INT NULL CONSTRAINT CHK_ColumnD_DocExc CHECK (
        ColumnD > 10
        AND ColumnD < 50
    );
    GO
    

    若要测试约束,请先添加传递 check 约束的值。

    INSERT INTO dbo.DocExc (ColumnD) VALUES (49);
    

    接下来,尝试添加使 check 约束失败的值。

    INSERT INTO dbo.DocExc (ColumnD) VALUES (55);