3

我正在为索引视图进行事务复制。我有其他复制模式绑定视图,它们使用 NOEXPAND 提示引用索引视图。即使我在为索引视图调用 sp_addarticle 之后为 NOEXPANDing 视图调用 sp_addarticle,但我收到了错误:

Hint 'noexpand' on object '...' is invalid.

因为 SQL Server 试图在索引视图上创建索引之前在目标服务器上创建 NOEXPANDing 视图。

有没有办法强制 SQL Server 在开始 NOEXPANDing 视图之前完成索引视图索引的复制?

4

2 回答 2

1

查看分销商数据库,您会发现用于复制前和复制后的脚本。这些是直接的 sql 脚本,因此您可以修改它们并将您喜欢的任何内容放入其中。

这意味着您可以修改 pre-repl 脚本以避免错误,并修改 post-repl 脚本以在创建索引后添加 noexpanding 视图。

于 2012-09-11T17:21:45.877 回答
0

我想我找到了一个更简单的方法。

使用 GUI 将索引视图添加到复制时,只会在模式定义中进行复制,这意味着任何尝试访问这些视图的存储过程如果包含 NOEXPAND 提示都会出错。

现在我猜你可以弄乱前/后脚本,但使用 MSDN 中的这篇文章:Indexed Views - Replications - NoExpand Hint似乎是一个更简单的选择。

您可以通过更改 sp_addarticle 的脚本并将 @schema_option 从0x0000000008000001替换为0x0000000008000051来复制索引。以下示例允许在订阅者处生成聚集索引和非聚集索引。

这会自动跨越索引,也意味着更少的脚本。

于 2015-11-18T13:02:55.620 回答