2009-08-12 5 views
3

Ich versuche, einen Index auf einer Ansicht von mir einzurichten. Erster Fehler war 1939, Schema Binding erforderlich.SQL Server Indexed View-Syntax für verbundene DB

Ok, kein Problem damit.

ALTER VIEW xyz WITH SCHEMABINDING AS abc 

nun in dieser Ansicht bin ich mit einer lokalen Tabelle [dbo]] [ReleantTable] und zwei verknüpften Tabellen aus anderen Datenbanken auf dem gleichen Server.

OtherDbName..OtherRelevantTable

Die Änderung der VIEW schlägt fehl und die Angabe von OtherDbName..OtherRelevantTable ist für die Schema-Bindung ungültig.

Ich denke, es ist nur ein Syntaxproblem. Könnte jemand mir Hinweis bekommen, wie ich mein OtherDb anspreche?

Antwort

4

Um eine indizierte Sicht zu erstellen, müssen sich Ihre Basistabellen in derselben Datenbank befinden.

Consult auf die folgende Microsoft-Online Referenz für weitere Details:

http://msdn.microsoft.com/en-us/library/ms191432(SQL.90).aspx

+0

thx für die Antwort. eigentlich brauche ich diesen index aus leistungsgründen unbedingt. Gibt es eine Möglichkeit, ein einzelnes Feld dieser Ansicht indiziert zu bekommen, obwohl es auch Daten von anderen 'Orten' sammelt? – KB22

+2

@ KB22: Um Ihre weitere Anfrage zu beantworten, ist die Antwort leider nein. Sie sehen, um einen nicht gruppierten Index für eine Ansicht zu erstellen, müssen Sie zuerst einen Clustered Index erstellen. Dazu muss SQL Server die Tabellendaten aus der Sicht physisch materialisieren und dabei den gesamten Inhalt der Sicht validieren. Diese Aktion kann nicht ausgeführt werden, wenn eine Sicht Basistabellen enthält, die auf mehrere Datenbanken verteilt sind. –

+1

Weiter zu meinen vorherigen Kommentaren würde ich vorschlagen, ein guter Ausgangspunkt wäre, die Cross-Datenbank-Abfrage zu erstellen, die Ihre Auswahlanforderungen erfüllen würde, und dann den Ausführungsplan zu überprüfen. Stellen Sie sicher, dass alle Ihre Verbindungsprädikate und Suchargumente über geeignete Indizes verfügen. –