我正在为索引视图进行事务复制。我有其他复制模式绑定视图,使用NOEXPAND提示引用索引视图。即使在为索引视图调用sp_addarticle之后调用sp_addarticle作为NOEXPANDing视图,我也收到错误:
Hint 'noexpand' on object '...' is invalid.
因为在索引视图上创建索引之前,SQL Server正在尝试在目标服务器上创建NOEXPANDing视图。
有没有办法强制SQL Server在NOEXPANDing视图启动之前完成复制索引视图索引?
答案 0 :(得分:1)
查看分发服务器数据库,您将找到复制前后的脚本。这些是直接的sql脚本,因此您可以修改它们并在其中添加您喜欢的任何内容。
这意味着您可以修改pre-repl脚本以避免错误,并修改post-repl脚本以在创建索引后添加noexpanding视图。
答案 1 :(得分:0)
我想我找到了一种更简单的方法。
使用GUI向复制添加索引视图时,只会复制架构定义,这意味着如果它们包含NOEXPAND提示,则尝试访问这些视图的任何存储过程都会出错。
现在我猜你可以搞乱前/后脚本,但是使用MSDN上的这篇文章:Indexed Views - Replications - NoExpand Hint似乎有一个更简单的选择。
您可以通过更改sp_addarticle的脚本来复制索引,并将@schema_option从 0x0000000008000001 替换为 0x0000000008000051 。以下示例允许在订阅服务器上生成聚簇索引和非聚簇索引。
这会自动提取索引,也意味着编写脚本的次数也会减少。