Erstellen einer indizierten Sicht, die auf eine nicht indizierte Sicht und Objekte aus mehreren DBs verweist

7

Ich habe die folgenden Objekte in einer create view-Anweisung im folgenden Format verwendet.

%Vor%

Die objects1 ist eine Tabelle aus Database1 , die Indizes enthält. Die objects2 through objects5 befinden sich in einem anderen database und alle diese 4 Objekte werden mit No indexes angezeigt.

Jetzt versuche ich eine indizierte Sicht mit allen oben genannten fünf Objekten zu erstellen, aber der SQL-Server erlaubt es mir nicht.

Erster Fehler ist:

Names must be in two-part format and an object cannot reference itself.

Zweiter Fehler ist:

Cannot schema bind view 'dbo.vw_Order' because name 'db2.dbo.object2' is invalid for schema binding.

Nun habe ich diese Fehler gegoogelt und ich kam zu folgenden Annahmen:

  1. Ansichten können keine Objekte aus mehreren Datenbanken in einer Join-Abfrage enthalten.
  2. Um Indizes für eine Ansicht zu erstellen, sollten alle Objekte in der Ansicht entweder Indizes haben oder mit einem Schema verknüpft sein (wie Funktionen).

Wenn ich die Ansicht wie eine Abfrage ausführen lasse, empfiehlt Execution Plan, einen Index für Spalten aus Objekten in db2 zu erstellen. Bitte lassen Sie mich wissen, ob meine Annahmen richtig sind. Wenn nicht, lassen Sie mich bitte wissen, wie ich in dieser Situation eine Ansicht erstellen kann.

    
Sanket J 04.04.2014, 21:07
quelle

3 Antworten

12

Da Sie bereits untersucht haben, dass alle Objekte (Tabellen / View) in einer Definition einer indizierten Sicht TWO PART name haben müssen, dh [Schema].[Object] , bedeutet dies, dass sich alle Objekte in einer Datenbank befinden und Sie nicht erstellen können indizierte Sicht über mehrere Datenbanken. Indizierte Sichten weisen eine Reihe von Einschränkungen auf, sollten Sie nach Möglichkeit eine gespeicherte Prozedur erstellen.

Ein anderer Fehler, den Sie bekommen, ist, dass Sie die Option WITH SCHEMABINDING in der Definition Ihrer Ansicht nicht finden. Es ist eine Voraussetzung für die Erstellung einer indizierten Sicht, dass Sie beim Erstellen der indizierten Sicht die Option WITH SCHEMABINDING verwenden müssen, d. H. Keines der zugrunde liegenden Schemata für Tabellen / Objekte kann geändert werden, bis Sie diese Sicht löschen.

Auch hier würde ich vorschlagen, in gespeicherte Prozeduren zu schauen, da es in Ihrem Fall unmöglich erscheint, eine indizierte Ansicht zu erstellen, wegen all der Einschränkungen, die damit verbunden sind.

    
M.Ali 05.04.2014 00:19
quelle
6

Fügen Sie dem Namen und den Tabellen der Ansicht den Besitzer hinzu. Wie:

%Vor%     
Cameron Castillo 12.02.2015 09:01
quelle
2

Sie können die indizierte Sicht nicht mit zwei Objekten verschiedener Datenbanken erstellen.

    
Ritesh kumar 09.04.2014 04:24
quelle