我有一个包含一些用户定义类型的数据库。据我了解,Merge Replication将自动包含已使用的UD类型。其中一种类型是在函数中使用的表变量。在发布者网站上工作正常,但在订阅者网站上它无法同步。为什么会这样?
我试图只复制使用该类型的一个函数,然后成功。之后,复制工作正常。
当我尝试对另一个系统进行相同的配置时,它在开始时失败,就像原来在先前系统上尝试一样,但现在即使我尝试复制一个过程,我仍然得到相同的错误。
错误如下:
架构脚本'some name.sch'无法传播到 订户。
当我追踪错误时:
找不到数据类型dbo.someName
答案 0 :(得分:1)
我认为Hilary Cotter在这个论坛上给出的答案可以帮助你:
Transactional Replication and User Defined Data Types
我会在这里引用它,以防链接被破坏:
您可以选择通过预快照脚本复制用户定义的数据类型。
您还可以选择将用户定义的数据类型复制为基本数据类型。这是文章属性对话框的转换数据类型部分。默认情况下,它为false,您可能希望将其设置为true以将它们转换为基本数据类型。例如,如果您的用户数据类型为varchar(11)(即EXEC sp_addtype ssn,' VARCHAR(11)',' NOT NULL'),则会将其复制为varchar (11)而不是ssn。
具有预快照脚本的第一个选项可通过出版物属性访问 - >快照。我假设你需要在那里提供一个脚本来检查订阅者中是否还没有给定的用户定义类型,然后创建它,否则跳过:
第二个建议的解决方案可通过单个文章属性访问:
看,如果以上内容可以帮助您解决问题。当然,还有一种解决方案可以在订阅者处手动创建缺少的UDT。