我们有一个合并出版物,它在很长一段时间(几年)内大部分时间都可以正常工作。最近添加了一篇文章,我们被告知快照已过期,因此我们重新生成了它。然后我们在初始化期间收到错误消息,并在详细的错误日志中发现了这个问题:
消息 1934,级别 16,状态 1,过程 DDLTrigger_Index,第 19 行插入失败,因为以下 SET 选项的设置不正确:“ANSI_PADDING”。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或查询通知和/或 xml 数据类型方法。
...快进到现在。在实验中,我们发现是的,可以在发布者上创建合并发布并在我们的订阅者服务器上订阅,但前提是使用不同的数据库。通过这个只是为了排除权限/等,并确定问题确实是订阅者数据库。
因此,从受影响的数据库中删除复制以清除任何隐藏的元数据混乱似乎是合乎逻辑的:
sp_removedbreplication @dbname = 'sickDB' @type = 'all'
到目前为止,一切都很好。但是现在,我得到了完全相同的错误,但在此过程中要早得多。具体来说,执行时:
/****** Begin: Script to be run at Subscriber ******/
use [sickDB]
exec sp_addmergepullsubscription
@publisher = N'publisher',
@publication = N'publication',
@publisher_db = N'goodDB',
@subscriber_type = N'Local',
@subscription_priority = 0,
@description = N'hope this works', @sync_type = N'Automatic'
(上面略有编辑)。
元数据中是否还有一些剩余的问题?关于 ANSI_PADDING 东西的原始理论实际上是订户数据库中有一些带有计算列的表,因此这似乎是相关的。然而,ANSI_PADDING 设置(和谷歌搜索)的一些翻转并没有真正得出结论性的答案。
非常感谢您的阅读,并让我知道我可以提供的任何其他可能有帮助的信息。
哦,是的,发布者和订阅者都是 SQL Server 2005。