我有一个包含一些用户定义类型的数据库。据我了解,Merge Replication将自动包含已使用的UD类型。其中一种类型是在函数中使用的表变量。在发布者网站上工作正常,但在订阅者网站上它无法同步。为什么会这样?
错误如下:
架构脚本'some name.sch'无法传播给订户。
当我追踪错误时:
找不到数据类型dbo.someName
我想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。