对复制禁用 CHECK 约束

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

你可以使用 SQL Server Management Studio 或 Transact-SQL 禁用 SQL Server 中的 CHECK 约束。 也可以对复制显式禁用检查约束,这在从早期版本的 SQL Server中发布数据时会非常有用。

注意

如果表是使用复制发布的,则对于复制代理执行的操作将自动禁用检查约束。 当复制代理在订阅服务器上执行插入、更新或删除操作时,将不检查约束;如果用户执行插入、更新或删除操作,则检查约束。 由于最初插入、更新或删除数据时已经在发布服务器上检查过约束,所以对于复制代理将禁用该约束。 有关详细信息,请参阅 指定架构选项

开始之前

安全性

权限

需要对表的 ALTER 权限。

使用 SQL Server Management Studio

对复制禁用 CHECK 约束

  1. “对象资源管理器”中,展开具有要修改的 CHECK 约束的表,再展开 “约束” 文件夹。

  2. 右键单击要修改的 CHECK 约束,然后单击 “修改”

  3. “CHECK 约束” 对话框中的 “表设计器”,对 “强制用于复制” 选择 “否”值。

  4. 单击“关闭”。

“使用 Transact-SQL”

对复制禁用 CHECK 约束

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

  2. 在标准菜单栏上,单击 “新建查询”

  3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。 第一个示例创建包含一个 IDENTITY 列的表和表中的一个 CHECK 约束。 然后,该示例删除该约束,并通过指定 NOT FOR REPLICATION 子句重新创建约束。

    USE AdventureWorks2022;  
    GO  
    CREATE TABLE dbo.doc_exd (column_a int IDENTITY (1,1)   
    CONSTRAINT exd_check CHECK (column_a > 1))   
    
    ALTER TABLE dbo.doc_exd   
    DROP CONSTRAINT exd_check;   
    GO  
    ALTER TABLE dbo.doc_exd    
    ADD CONSTRAINT exd_check CHECK NOT FOR REPLICATION (column_a > 1);  
    

有关详细信息,请参阅 ALTER TABLE (Transact-SQL)

另请参阅

指定架构选项