Ändern von Daten in partitionierten Sichten

Wenn eine partitionierte Sicht nicht aktualisierbar ist, kann sie nur als schreibgeschützte Kopie der ursprünglichen Tabelle dienen. Eine aktualisierbare partitionierte Sicht kann alle Funktionen der ursprünglichen Tabelle aufweisen.

Eine Sicht wird als aktualisierbare partitionierte Sicht betrachtet, wenn sie aus einer Reihe von SELECT-Anweisungen besteht, deren Resultsets mithilfe der UNION ALL-Anweisung zusammengefasst werden. Jede SELECT-Anweisung verweist auf eine SQL Server-Basistabelle. Diese Tabelle kann eine lokale Tabelle oder eine verknüpfte Tabelle sein, auf die mit einem vierteiligen Namen, mit der OPENROWSET-Funktion oder mit der OPENDATASOURCE-Funktion verwiesen wird (eine OPENDATASOURCE- oder OPENROWSET-Funktion, die eine Pass-Through-Abfrage angibt, ist nicht zulässig).

Darüber hinaus müssen Anweisungen zur Datenänderung, die auf die Sicht verweisen, die für INSERT-, UPDATE- und DELETE-Anweisungen definierten Regeln einhalten.

HinweisHinweis

Der Massenimport in eine partitionierte Sicht wird weder vom Befehl bcp, noch von der BULK INSERT-Anweisung oder der INSERT ... SELECT * FROM OPENROWSET(BULK...) -Anweisung verwendet. Sie können mit der INSERT-Transact-SQL-Anweisung jedoch mehrere Zeilen in eine partitionierte Sicht einfügen.

Wenn die partitionierte Sicht auf mehrere Server verteilt ist, sollten Sie nach Möglichkeit Trigger oder kaskadierende Aktionen in den Basistabellen vermeiden. Ein Trigger oder eine kaskadierende Aktion könnte Änderungen an den zugrunde liegenden Daten vornehmen, die die Sichtdefinition betreffen könnten.

Verteilte partitionierte Sichten können nur aktualisiert werden, wenn der Benutzer CONTROL-, ALTER-, TAKE OWNERSHIP- oder VIEW DEFINITION-Berechtigungen für jede der Sicht zugrunde liegende Tabelle hat. Weitere Informationen finden Sie unter Problembehandlung bei der Metadatensichtbarkeit von verteilten partitionierten Sichten.

HinweisHinweis

Sie können Daten nur über eine verteilte partitionierte Sicht ändern, wenn Sie SQL Server 2008 Enterprise oder SQL Server 2008 Developer installieren. Allerdings können Sie Daten über eine lokale partitionierte Sicht in einer beliebigen Edition von SQL Server 2008 ändern.

INSERT-Anweisungen

INSERT-Anweisungen fügen über die partitionierte Sicht Daten zu den Elementtabellen hinzu. Die INSERT-Anweisungen müssen die folgenden Regeln einhalten:

  • Alle Spalten müssen in die INSERT-Anweisung eingeschlossen werden, und zwar auch dann, wenn die Spalte in der Basistabelle einen NULL-Wert aufweist oder in der Basistabelle eine DEFAULT-Einschränkung für die Spalte definiert ist.

  • Das DEFAULT-Schlüsselwort kann in der VALUES-Klausel der INSERT-Anweisung nicht angegeben werden.

  • INSERT-Anweisungen müssen einen Wert bereitstellen, der die für die Partitionierungsspalte definierte Logik der CHECK-Einschränkung für eine der Elementtabellen erfüllt.

  • INSERT-Anweisungen sind nicht zulässig, wenn eine Elementtabelle eine Spalte mit einer Identitätseigenschaft enthält.

  • INSERT-Anweisungen sind nicht zulässig, wenn eine Elementtabelle eine timestamp-Spalte enthält.

  • INSERT-Anweisungen sind nicht zulässig, wenn eine Selbstverknüpfung mit derselben Sicht oder einer der Elementtabellen vorliegt.

UPDATE-Anweisungen

UPDATE-Anweisungen ändern über die partitionierte Sicht Daten in einer oder mehreren der Elementtabellen. Die UPDATE-Anweisungen müssen die folgenden Regeln einhalten:

  • UPDATE-Anweisungen können in der SET-Klausel nicht das DEFAULT-Schlüsselwort als Wert angeben. Dies gilt auch dann, wenn in der entsprechenden Elementtabelle ein DEFAULT-Wert für die Spalte definiert ist.

  • Der Wert einer Spalte mit einer Identitätseigenschaft kann nicht geändert werden; die anderen Spalten können jedoch aktualisiert werden.

  • Der Wert eines Primärschlüssels kann nicht geändert werden, wenn die Spalte Daten vom Typ text, image oder ntext enthält.

  • Aktualisierungen sind nicht zulässig, wenn eine Basistabelle eine timestamp-Spalte enthält.

  • Aktualisierungen sind nicht zulässig, wenn eine Selbstverknüpfung mit derselben Sicht oder einer der Elementtabellen vorliegt.

DELETE-Anweisungen

DELETE-Anweisungen entfernen über die partitionierte Sicht Daten aus einer oder mehreren der Elementtabellen. DELETE-Anweisungen sind nicht zulässig, wenn eine Selbstverknüpfung mit derselben Sicht oder einer der Elementtabellen vorliegt.