1

2 つの databaseDB1があり、DB2両方が同じインスタンスの下にあるとします。にテーブルがありtab2ますDB2。からDB1取得するビューを作成しました:tab2DB2

CREATE VIEW [dbo].[Tab2]
AS
SELECT *
FROM  DB2.dbo.Tab2

tab2次に、 inのキーを作成しようとしましたDB1:

CREATE UNIQUE CLUSTERED INDEX tab2_Key
ON dbo. tab2 (id2)

これにより、次のエラーがスローされます。

メッセージ 1939、レベル 16、状態 1、行 1
ビューがスキーマにバインドされていないため、ビュー 'Tab2' にインデックスを作成できません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

4

さて、インデックスを持つビューにはいくつかのルールがあります (スキーマバインディングに必要なルールからのいくつかのカスケード)。

ルールの 1 つは、ビューに SELECT * を含めることはできないということです。もう 1 つは、参照するオブジェクトと同じデータベースに存在する必要があることです。

ルールをリストアップすることもできますが、それらはドキュメントhereおよびhereにリストされています。とにかく、ルールを教えてもあまり効果がないと思います。

このビューのクラスター化インデックスが提供すると思われる利点を正確に説明できますか? インデックス付きビューの方が「速い」と誰かに言われましたか? DB2.dbo.Tab2この場合、特にそのテーブルにすでにインデックスがある場合、クエリに対して何をするかわかりませんid2。これはいくつかの点で間違ったにおいがします...

于 2012-07-03T18:59:56.010 に答える