3

インデックス付きビューのトランザクション レプリケーションを行っています。NOEXPAND ヒントを使用してインデックス付きビューを参照するスキーマ バインド ビューをレプリケートする他のビューがあります。インデックス付きビューに対して sp_addarticle を呼び出した後、NOEXPANDing ビューに対して sp_addarticle を呼び出しても、次のエラーが発生します。

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

SQL Server は、インデックス付きビューにインデックスを作成する前に、ターゲット サーバーで NOEXPANDing ビューを作成しようとするためです。

NOEXPANDing ビューを開始する前に、SQL Server にインデックス付きビュー インデックスのレプリケートを強制的に終了させる方法はありますか?

4

2 に答える 2

1

ディストリビューター データベースを調べると、レプリケーション前およびレプリケーション後のスクリプトが見つかります。これらは単純な sql スクリプトなので、これらを変更して好きなものを入れることができます。

つまり、修復前スクリプトを変更してエラーを回避し、修復後スクリプトを変更して、インデックスの作成後に 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 に答える