【问题标题】:merge replication sql server orphan constraints合并复制sql server孤儿约束
【发布时间】:2018-08-06 23:23:33
【问题描述】:
我们最近迁移到了一个新服务器,首先恢复了数据库,然后设置了复制。相同的 Merge 代理适用于现有服务器,但不适用于新服务器。以下是运行合并代理时弹出的错误:
无法使用架构脚本“Subscribed_Userdb99ffc3_18.sch”
传播给订阅者。 (来源:MSSQL_REPL,错误号:
MSSQL_REPL-2147201001) 获取帮助:http://help/MSSQL_REPL-2147201001
无法删除对象“dbo.Subscribed_Users_Temp_Storage”,因为它
由 FOREIGN KEY 约束引用。 (来源:MSSQLServer,错误
号码:3726)获取帮助:http://help/3726
当我尝试删除表时,它显示表被外键引用。当我尝试禁用外键时,它显示
消息 3733,级别 16,状态 2,线路 1 约束
'FK_Subscribed_User_Paypal_Details_Subscribed_Users_Temp_Storage' 确实
不属于表 'subscribed_users_temp_storage'。消息 3727,级别
16,状态 0,第 1 行
当我检查表的架构时,它显示外键在那里。
这是否意味着外键是孤儿,如果是,那么可能的解决方案是什么。
无法删除约束。查看以前的错误。
【问题讨论】:
标签:
sql-server
merge-replication
【解决方案1】:
查看您问题中的 drop FK 错误消息,我认为您正试图将其放到错误的表上。请注意,最初的复制代理尝试删除 dbo.Subscribed_Users_Temp_Storage 表,但报告说存在引用它的外键。
您已找到提到的FK_Subscribed_User_Paypal_Details_Subscribed_Users_Temp_Storage 外键,但它不在dbo.Subscribed_Users_Temp_Storage 中,而是基于它的名称,我认为它位于Subscribed_User_Paypal_Details 表中,而您正试图将其放入@ 987654325@.
我认为正确的DROP FK 语句应该是这样的:
ALTER TABLE [dbo].[Subscribed_User_Paypal_Details]
DROP CONSTRAINT [FK_Subscribed_User_Paypal_Details_Subscribed_Users_Temp_Storage]
注意,我假设Subscribed_User_Paypal_Details 表也位于[dbo] 模式中。如果它位于不同的架构中,请相应地更改语句。
注意,可能有其他外键引用dbo.Subscribed_Users_Temp_Storage 表。在复制代理重新创建dbo.Subscribed_Users_Temp_Storage 表后,您需要删除/禁用然后重新创建/启用它们。
要找出所有引用 dbo.Subscribed_Users_Temp_Storage 的 FK,请执行以下命令:
exec sp_help 'dbo.Subscribed_Users_Temp_Storage'
并向下滚动到名为Table is referenced by foreign key 的SELECT 结果。
HTH