对复制禁用外键约束
适用于: SQL Server 2016 (13.x) 及更高版本Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW)
可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中对复制禁用外键约束。 如果正在从以前版本的 SQL Server 发布数据,这很有用。
注意
如果表是使用复制发布的,则对于复制代理执行的操作将自动禁用外键约束。 默认情况下为外键约束和检查约束指定 NOT FOR REPLICATION 选项;约束对用户操作强制使用,但不对代理操作强制使用。 当复制代理在订阅服务器上执行插入、更新或删除操作时,将不检查约束;如果用户执行插入、更新或删除操作,则检查约束。 由于最初插入、更新或删除数据时已经在发布服务器上检查过约束,所以对于复制代理将禁用该约束。
权限
需要对表的 ALTER 权限。
使用 SQL Server Management Studio
对复制禁用外键约束
在“对象资源管理器”中,展开具有要修改的外键约束的表,再展开“键”文件夹。
右键单击外键约束,再选择“修改”。
在“外键关系”对话框中,针对“强制用于复制” 选择“否”值。
选择“关闭”。
使用 Transact-SQL
对复制禁用外键约束
若要在 Transact-SQL 中执行此任务,请删除外键约束。 在“对象资源管理器”中,展开具有要修改的外键约束的表,再展开“键”文件夹。
右键单击外键约束,选择“编写键的脚本为”,然后选择“DROP 和 CREATE 到”,然后选择“新查询编辑器窗口”。 生成的脚本应与
AdventureWorks2022
示例数据库中的以下示例类似:ALTER TABLE [Sales].[SalesTerritoryHistory] DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO ALTER TABLE [Sales].[SalesTerritoryHistory] WITH CHECK ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] FOREIGN KEY([BusinessEntityID]) REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]); GO ALTER TABLE [Sales].[SalesTerritoryHistory] CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO
在脚本的
ALTER TABLE ... ADD CONSTRAINT
部分,修改新的外键约束并指定 NOT FOR REPLICATION 选项。 例如:ALTER TABLE [Sales].[SalesTerritoryHistory] DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO ALTER TABLE [Sales].[SalesTerritoryHistory] WITH CHECK ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] FOREIGN KEY([BusinessEntityID]) REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]) NOT FOR REPLICATION; --added to disable constraint for replication GO ALTER TABLE [Sales].[SalesTerritoryHistory] CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] GO