Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Erstellt eine virtuelle Tabelle, deren Inhalt (Spalten und Zeilen) durch eine Abfrage definiert wird. Verwenden Sie diese Anweisung, um in einer oder mehreren Tabellen in der Datenbank eine Sicht der Daten zu erstellen. Eine Sicht kann z. B. für folgende Zwecke verwendet werden:
Um die Darstellung einer Datenbank für jeden einzelnen Benutzer einzuschränken, zu vereinfachen und anzupassen.
Als Sicherheitsmechanismus, indem Benutzern der Zugriff auf Daten über die Sicht ermöglicht wird, ohne diesen Benutzern jedoch die Berechtigungen für den direkten Zugriff auf die zugrunde liegenden Basistabellen zu gewähren.
Um eine abwärtskompatible Schnittstelle zum Emulieren einer Tabelle bereitzustellen, deren Schema geändert wurde.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax für SQL Server und Azure SQL-Datenbank
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Syntax für Azure Synapse Analytics und Parallel Data Warehouse.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Syntax für Microsoft Fabric Data Warehouse- und SQL-Analyseendpunkt.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Arguments
ODER ALTER
Gilt für: Azure SQL-Datenbank und SQL Server (ab SQL Server 2016 (13.x) SP1).
Ändert die Sicht nur, sofern diese bereits vorhanden ist.
schema_name
Ist der Name des Schemas, zu dem die Sicht gehört.
view_name
Der Name der Sicht. Sichtnamen müssen den Regeln für Bezeichner entsprechen. Das Angeben des Sichtbesitzernamens ist optional.
column
Der Name, den eine Spalte in einer Sicht erhalten soll. Ein Spaltenname ist nur erforderlich, wenn eine Spalte von einem arithmetischen Ausdruck, einer Funktion oder einer Konstante abgeleitet wird; wenn zwei oder mehr Spalten andernfalls denselben Namen haben, in der Regel aufgrund einer Verknüpfung; oder wenn eine Spalte in einer Ansicht einen anderen Namen als die spalte angegeben wird, von der sie abgeleitet wird. Spaltennamen können auch in der SELECT Anweisung zugewiesen werden.
Wenn keine Spalte angegeben ist, erhalten die Ansichtsspalten die gleichen Namen wie die Spalten in der SELECT Anweisung.
Note
In den Spalten für die Ansicht gelten die Berechtigungen für einen Spaltennamen unabhängig von der Quelle der zugrunde liegenden Daten für eine oder CREATE VIEW eine ALTER VIEW Anweisung. Wenn z. B. Berechtigungen für die SalesOrderID Spalte in einer CREATE VIEW-Anweisung erteilt werden, kann eine ALTER VIEW Anweisung die SalesOrderID Spalte mit einem anderen Spaltennamen benennen, z OrderRef. B. über die Berechtigungen, die der Ansicht zugeordnet SalesOrderIDsind.
AS
Gibt die Aktionen an, die die Sicht ausführen soll.
select_statement
Die SELECT Anweisung, die die Ansicht definiert. In der Anweisung dürfen mehrere Tabellen und andere Sichten angegeben werden. Entsprechende Berechtigungen sind erforderlich, um aus den Objekten auszuwählen, auf die in der SELECT Klausel der erstellten Ansicht verwiesen wird.
Eine Ansicht muss keine Teilmenge der Zeilen und Spalten einer bestimmten Tabelle sein. Eine Ansicht kann erstellt werden, die mehrere Tabellen oder andere Ansichten mit einer SELECT Klausel mit einer beliebigen Komplexität verwendet.
In einer indizierten Ansichtsdefinition muss es sich bei der SELECT Anweisung um eine einzelne Tabellenanweisung oder eine multitable JOIN mit optionaler Aggregation handeln.
Die SELECT Klauseln in einer Ansichtsdefinition können nicht enthalten:
Eine
ORDER BYKlausel, es sei denn, es gibt auch eineTOPKlausel in der Auswahlliste derSELECTAnweisung.Important
Die
ORDER BYKlausel wird nur verwendet, um die Zeilen zu bestimmen, die von derTOPAnsichtsdefinition oderOFFSETKlausel zurückgegeben werden. DieORDER BYKlausel garantiert keine sortierten Ergebnisse, wenn die Ansicht abgefragt wird, es sei dennORDER BY, sie wird auch in der Abfrage selbst angegeben.Das schlüsselwort
INTODie
OPTIONKlauselEin Verweis auf eine temporäre Tabelle oder auf eine Tabellenvariable
Da select_statement die SELECT Anweisung verwendet, ist es gültig, Verknüpfungshinweise und Tabellenhinweise wie in der FROM Klausel angegeben zu verwenden. Weitere Informationen finden Sie unter FROM (Transact-SQL) und SELECT (Transact-SQL).
Funktionen und mehrere SELECT Anweisungen, die durch UNIONUNION ALLselect_statement getrennt oder verwendet werden können.
OPTION PRÜFEN
Erzwingt, dass alle für die Sicht ausgeführten Datenänderungsanweisungen den Kriterien entsprechen müssen, die innerhalb von select_statement festgelegt wurden. Wenn eine Zeile über eine Ansicht geändert wird, wird sichergestellt, WITH CHECK OPTION dass die Daten nach dem Commit der Änderung durch die Ansicht sichtbar bleiben.
Note
Dies CHECK OPTION gilt nur für Aktualisierungen, die über die Ansicht vorgenommen wurden. Sie gilt nicht für Updates, die direkt für die zugrunde liegenden Tabellen einer Ansicht durchgeführt werden.
ENCRYPTION
Gilt für: SQL Server 2008 (10.0.x) und höher sowie Azure SQL-Datenbank.
Verschlüsselt die Einträge in sys.syscomments , die den Text der CREATE VIEW Anweisung enthalten. Die Verwendung WITH ENCRYPTION verhindert, dass die Ansicht als Teil der SQL Server-Replikation veröffentlicht wird.
SCHEMABINDING
Bindet die Sicht an das Schema der zugrunde liegenden Basistabellen. Wenn SCHEMABINDING angegeben, kann die Basistabelle oder -tabellen nicht auf eine Weise geändert werden, die sich auf die Ansichtsdefinition auswirken würde. Zunächst muss die Sichtdefinition selbst geändert oder gelöscht werden, um Abhängigkeiten in der zu ändernden Tabelle zu entfernen. Bei Verwendung SCHEMABINDINGmuss die select_statement die zweiteiligen Namen (Schema) enthalten.-Objekt) von Tabellen, Ansichten oder benutzerdefinierten Funktionen, auf die verwiesen wird. Alle Objekte, auf die verwiesen wird, müssen in derselben Datenbank vorhanden sein.
Sichten oder Tabellen, die Bestandteil einer mit der SCHEMABINDING-Klausel erstellten Sicht sind, können erst dann gelöscht werden, wenn diese Sicht gelöscht oder geändert wurde, sodass keine Schemabindung mehr vorhanden ist. Andernfalls löst Datenbank-Engine einen Fehler aus. Das Ausführen von ALTER TABLE Anweisungen für Tabellen, die an Ansichten mit Schemabindung teilnehmen, schlagen außerdem fehl, wenn sich diese Anweisungen auf die Ansichtsdefinition auswirken.
VIEW_METADATA
Gibt an, dass die Instanz von SQL Server die Metadateninformationen der Sicht anstelle der Basistabelle(n) an die DB-Library-, ODBC- und OLE DB-APIs zurückgibt, wenn Metadaten des Durchsuchenmodus für eine Abfrage angefordert werden, die auf die Sicht verweist. Bei Metadaten des Durchsuchenmodus handelt es sich um zusätzliche Metadaten, die von der Instanz von SQL Server an diese clientseitigen APIs zurückgegeben werden. Mithilfe dieser Metadaten können die clientbasierten APIs aktualisierbare clientbasierte Cursors implementieren. Metadaten des Durchsuchenmodus enthalten Informationen zu der Basistabelle, zu der die Spalten im Resultset gehören.
Bei Ansichten, die mit VIEW_METADATAerstellt wurden, gibt die Metadaten des Suchmodus den Ansichtsnamen und nicht die Basistabellennamen zurück, wenn sie Spalten aus der Ansicht im Resultset beschreibt.
Wenn eine Ansicht mit der Verwendung WITH VIEW_METADATAerstellt wird, sind alle zugehörigen Spalten, mit Ausnahme einer Zeitstempelspalte , aktualisierbar, wenn die Ansicht über INSTEAD OF INSERT oder INSTEAD OF UPDATE Auslöser verfügt. Weitere Informationen zu aktualisierbaren Sichten finden Sie unter Hinweise.
Remarks
Eine Sicht kann nur in der aktuellen Datenbank erstellt werden. Dies CREATE VIEW muss die erste Anweisung in einem Abfragebatch sein. Für eine Sicht sind maximal 1.024 Spalten zulässig.
Wenn eine Abfrage für eine Sicht durchgeführt wird, überprüft Datenbank-Engine, ob alle Datenbankobjekte, auf die in der Anweisung verwiesen wird, vorhanden sind, ob sie im Kontext der Anweisung gültig sind und ob Datenänderungsanweisungen gegen die Regeln der Datenintegrität verstoßen. Schlägt eine Überprüfung fehl, wird eine Fehlermeldung zurückgegeben. Andernfalls wird die Aktion in eine Aktion für die zugrunde liegende Tabelle bzw. Tabellen übersetzt.
Wenn eine Sicht von einer Tabelle oder Sicht abhängt, die gelöscht wurde, erzeugt Datenbank-Engine eine Fehlermeldung, wenn jemand versucht, die Sicht zu verwenden. Wenn eine neue Tabelle oder Sicht, deren Struktur sich nicht von der vorherigen Basistabelle unterscheidet, erstellt wird, um die gelöschte zu ersetzen, wird die Sicht wieder verwendbar. Wenn sich die Struktur der neuen Tabelle oder Sicht ändert, muss die Sicht gelöscht und neu erstellt werden.
Wenn keine Ansicht mit der SCHEMABINDING Klausel erstellt wird, führen Sie sp_refreshview aus, wenn Änderungen an den Objekten vorgenommen werden, die der Ansicht zugrunde liegen, die sich auf die Definition der Ansicht auswirken. Andernfalls liefert die Abfrage der Sicht möglicherweise unerwartete Ergebnisse.
Beim Erstellen einer Sicht werden die Informationen zu dieser in den folgenden Katalogsichten gespeichert: sys.views, sys.columns und sys.sql_expression_dependencies. Der Text der CREATE VIEW Anweisung wird in der Katalogansicht sys.sql_modules gespeichert.
Eine Abfrage, die einen Index für eine ansicht verwendet, die mit numerischen oder float-Ausdrücken definiert ist, kann ein Ergebnis haben, das sich von einer ähnlichen Abfrage unterscheidet, die den Index nicht in der Ansicht verwendet. Dieser Unterschied kann durch Runden von Fehlern während INSERTDELETE, oder UPDATE Aktionen zu zugrunde liegenden Tabellen verursacht werden.
Das Datenbankmodul speichert die Einstellungen und SET QUOTED_IDENTIFIERSET ANSI_NULLS wann eine Ansicht erstellt wird. Diese Originaleinstellungen werden zum Analysieren der Sicht wiederhergestellt, wenn die Sicht verwendet wird. Daher wirken sich alle Clientsitzungseinstellungen für SET QUOTED_IDENTIFIER und SET ANSI_NULLS nicht auf die Ansichtsdefinition aus, wenn auf die Ansicht zugegriffen wird.
In Azure Synapse Analytics unterstützen Ansichten keine Schemabindung. Daher sollten Sie, wenn Änderungen an den zugrunde liegenden Objekten vorgenommen werden, die Ansicht ablegen und neu erstellen, um die zugrunde liegenden Metadaten zu aktualisieren. Weitere Informationen finden Sie unter T-SQL-Sichten mit dediziertem SQL-Pool und serverlosem SQL-Pool in Azure Synapse Analytics.
In Azure Synapse Analytics werden aktualisierbare Ansichten, DML-Trigger (entweder vom Typ AFTER oder INSTEAD OF) und partitionierte Ansichten nicht unterstützt. Weitere Informationen finden Sie unter T-SQL-Sichten mit dediziertem SQL-Pool und serverlosem SQL-Pool in Azure Synapse Analytics.
In Azure Synapse Analytics werden partitionierte Ansichten nicht unterstützt. Weitere Informationen finden Sie unter T-SQL-Sichten mit dediziertem SQL-Pool und serverlosem SQL-Pool in Azure Synapse Analytics.
In der Fabric SQL-Datenbank können Ansichten erstellt werden, sie werden jedoch nicht in die Fabric OneLake gespiegelt. Weitere Informationen finden Sie unter Einschränkungen der Fabric SQL-Datenbankspiegelung.
Aktualisierte Ansichten
Sie können die Daten einer zugrunde liegenden Basistabelle über eine Sicht ändern, wenn die folgenden Bedingungen erfüllt sind:
Alle Änderungen, einschließlich
UPDATE,INSERTundDELETEAnweisungen, müssen nur aus einer Basistabelle auf Spalten verweisen.Die Spalten, die in der Sicht geändert werden, müssen direkt auf die zugrunde liegenden Daten der Tabellenspalten verweisen. Die Spalten können nicht auf andere Art abgeleitet werden, wie etwa über:
Eine Aggregatfunktion:
AVG,COUNT, ,SUM,MINMAX, ,GROUPING,STDEVSTDEVP, , undVARVARP.Eine Berechnung. Die Spalte kann mit einem Ausdruck, der andere Spalten verwendet, nicht berechnet werden. Spalten, die mithilfe der Mengenoperatoren UNION, UNION ALL, CROSSJOIN, EXCEPT und INTERSECT erstellt werden, werden berechnet und sind daher auch nicht aktualisierbar.
Die zu ändernden Spalten sind von , oder
GROUP BYHAVINGKlauseln nicht betroffenDISTINCT.TOP wird in der select_statement der Ansicht zusammen mit der
WITH CHECK OPTIONKlausel nicht verwendet.
Die vorigen Einschränkungen gelten, so wie für die Sicht selbst, für alle Unterabfragen in der FROM-Klausel der Sicht. Im Allgemeinen muss Datenbank-Engine Änderungen von der Sichtdefinition an einer Basistabelle eindeutig nachverfolgen können. Weitere Informationen finden Sie unter Modify Data Through a View (Ändern von Daten über eine Sicht).
Wenn Sie aufgrund der vorigen Einschränkungen die Daten nicht direkt über eine Sicht ändern können, sollten Sie die folgenden Optionen berücksichtigen:
ANSTELLE VON Auslösern
INSTEAD OFTrigger können in einer Ansicht erstellt werden, um eine Ansicht aktualisierbar zu machen. DerINSTEAD OFTrigger wird anstelle der Datenänderungsanweisung ausgeführt, für die der Trigger definiert ist. Mithilfe dieses Triggers kann der Benutzer die Gruppe von Aktionen angeben, die erforderlich sind, um die Datenänderungsanweisung zu verarbeiten. Wenn daher einINSTEAD OFTrigger für eine Ansicht einer bestimmten Datenänderungsanweisung (INSERT,UPDATEoderDELETE) vorhanden ist, ist die entsprechende Ansicht über diese Anweisung aktualisierbar. Weitere Informationen zuINSTEAD OFTriggern finden Sie unter DML-Trigger.Partitionierte Ansichten
Wenn es sich bei der Sicht um eine partitionierte Sicht handelt, ist sie mit gewissen Einschränkungen aktualisierbar. Bei Bedarf unterscheidet Datenbank-Engine zwischen lokalen partitionierten Sichten (als Sichten, bei denen sich alle beteiligten Tabellen und die jeweilige Sicht selbst auf derselben SQL Server-Instanz befinden) und verteilten partitionierten Sichten (als Sichten, bei denen sich mindestens eine der Tabellen auf einem anderen Server oder Remoteserver befindet).
Partitionierte Ansichten
Eine partitionierte Ansicht ist eine Ansicht, die von einer UNION ALL Von Membertabellen auf die gleiche Weise definiert wird, aber separat als mehrere Tabellen in derselben Instanz von SQL Server oder in einer Gruppe von autonomen Instanzen von SQL Server-Servern gespeichert wird, die als Verbunddatenbankserver bezeichnet werden.
Note
Die bevorzugte Methode zum lokalen Partitionieren von Daten auf einem Server ist die mithilfe partitionierter Tabellen. Weitere Informationen finden Sie unter partitionierte Tabellen und Indizes.
Wenn Sie ein Partitionierungsschema entwerfen, muss klar sein, welche Daten zu jeder Partition gehören. Die Daten der Customers-Tabelle sind beispielsweise auf drei Mitgliedstabellen an drei Serverstandorten verteilt: Customers_33 auf Server1, Customers_66 auf Server2 und Customers_99 auf Server3.
Eine partitionierte Sicht auf Server1 wird wie folgt definiert:
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from member table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99;
Im Allgemeinen gilt eine Sicht als partitioniert, wenn sie die folgende Form aufweist:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
Bedingungen für das Erstellen von partitionierten Ansichten
Die SELECT-
listIn der Spaltenliste der Sichtdefinition wählen Sie alle Spalten der Mitgliedstabellen aus.
Stellen Sie sicher, dass die Spalten an derselben Ordnungsposition jeder
select listdenselben Typ aufweisen, einschließlich Sortierungen. Es reicht nicht aus, dass die Spalten implizit konvertierbar sind, wie es im Allgemeinen derUNIONFall ist.Demnach muss mindestens eine Spalte (z. B.
<col>) in allen SELECT-Listen an derselben Ordnungsposition vorhanden sein. Definieren Sie<col>so, dass die MitgliedstabellenT1, ..., Tnüber CHECK-EinschränkungenC1, ..., Cnverfügen, die entsprechend in<col>definiert sind.Die für
C1definierte EinschränkungT1muss die folgende Form haben:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | \<= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >Die Einschränkungen müssen so festgelegt sein, dass jeder angegebene Wert von
<col>höchstens eine der EinschränkungenC1, ..., Cnerfüllt, sodass die Einschränkungen eine Gruppe von getrennten oder nicht überlappenden Intervallen bilden. Die<col>-Spalte, für die die getrennten Einschränkungen definiert sind, wird Partitionierungsspalte genannt. Die Partitionierungsspalte kann in den zugrunde liegenden Tabellen unterschiedliche Namen haben. Die Einschränkungen müssen sich im enabled- und trusted-Status befinden, damit sie die zuvor genannten Bedingungen für die Partitionierungsspalte erfüllen. Wenn die Einschränkungen deaktiviert sind, aktivieren Sie die Einschränkungsüberprüfung erneut, indem Sie dieCHECK CONSTRAINT *constraint_name*Option verwendenALTER TABLE, und verwenden Sie dieWITH CHECKOption, um sie zu überprüfen.Die folgenden Beispiele zeigen gültige Einschränkungsgruppen:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }Die mehrfache Verwendung einer Spalte in der Auswahlliste ist nicht zulässig.
Spaltspaltungsspalte
Die Partitionierungsspalte ist Teil der PRIMARY KEY-Einschränkung der Tabelle.
Eine berechnete Spalte, eine Identitätspalte, eine Standardspalte oder eine timestamp-Spalte darf hierfür nicht verwendet werden.
Wenn es für eine Spalte einer Mitgliedstabelle mehrere Einschränkungen gibt, ignoriert die Datenbank-Engine alle diese Einschränkungen und berücksichtigt sie nicht, wenn ermittelt wird, ob die Sicht eine partitionierte Sicht ist. Damit die Bedingungen für partitionierte Sichten erfüllt werden, stellen Sie sicher, dass es für die Partitionierungsspalte nur eine Partitionierungseinschränkung gibt.
Für Partitionierungsspalten gelten keine Einschränkungen hinsichtlich der Aktualisierbarkeit.
Mitgliedstabellen oder zugrunde liegende Tabellen
T1, ..., TnBei den Tabellen kann es sich entweder um lokale Tabellen oder um Tabellen von anderen Computern handeln, auf denen SQL Server ausgeführt wird, auf die entweder über einen vierteiligen Namen oder einen OPENDATASOURCE- oder OPENROWSET-basierten Namen verwiesen wird. Die OPENDATASOURCE- und OPENROWSET-Syntax kann zwar einen Tabellennamen angeben, nicht jedoch eine Pass-Through-Abfrage. Weitere Informationen finden Sie unter OPENDATASOURCE (Transact-SQL) und OPENROWSET (Transact-SQL).
Falls eine oder mehrere Mitgliedstabellen Remotetabellen sind, wird die Sicht verteilte partitionierte Sicht genannt, und es gelten zusätzliche Bedingungen. Diese werden weiter unten in diesem Abschnitt beschrieben.
Die gleiche Tabelle kann nicht zweimal in der Gruppe von Tabellen angezeigt werden, die mit der
UNION ALLAnweisung kombiniert werden.Die Mitgliedstabellen dürfen nicht über Indizes verfügen, die für berechnete Spalten der Tabelle erstellt werden.
Für alle Mitgliedstabellen gilt, dass ihre PRIMARY KEY-Einschränkungen auf gleich vielen Spalten basieren.
Alle Mitgliedstabellen einer Sicht weisen dieselbe Einstellung für die ANSI-Auffüllung auf. Dies kann entweder mithilfe der Benutzeroptionenoption in
sp_configureoder der SET-Anweisung festgelegt werden.
Bedingungen zum Ändern von Daten in partitionierten Ansichten
Die folgenden Einschränkungen gelten für Anweisungen, die Daten in partitionierten Sichten ändern:
Die
INSERTAnweisung liefert Werte für alle Spalten in der Ansicht, auch wenn die zugrunde liegenden Membertabellen eineDEFAULTEinschränkung für diese Spalten aufweisen oder wenn sie Werte zulassenNULL. Für die Membertabellenspalten mitDEFAULTDefinitionen können die Anweisungen das SchlüsselwortDEFAULTnicht explizit verwenden.Der in die Partitionierungsspalte eingefügte Wert erfüllt mindestens eine der zugrunde liegenden Einschränkungen; andernfalls schlägt die Einfügeaktion mit einer Einschränkungsverletzung fehl.
UPDATEAnweisungen können dasDEFAULTSchlüsselwort nicht als Wert in derSETKlausel angeben, auch wenn die Spalte einenDEFAULTWert aufweist, der in der entsprechenden Membertabelle definiert ist.Spalten in der Ansicht, die eine Identitätsspalte in einer oder mehreren Membertabellen sind, können nicht mithilfe einer oder
INSERTeinerUPDATEAnweisung geändert werden.Wenn eine der Membertabellen eine Zeitstempelspalte enthält, können die Daten nicht mithilfe einer oder
INSERTeinerUPDATEAnweisung geändert werden.Wenn eine der Membertabellen einen Trigger oder eine
ON UPDATE CASCADE/SET NULL/SET DEFAULTON DELETE CASCADE/SET NULL/SET DEFAULTEinschränkung enthält, kann die Ansicht nicht geändert werden.INSERT,UPDATEundDELETEAktionen für eine partitionierte Ansicht sind nicht zulässig, wenn eine Selbstverknppung mit derselben Ansicht oder mit einer der Membertabellen in der Anweisung vorhanden ist.Das Massenimporten von Daten in eine partitionierte Ansicht wird von oder den
bcpBULK INSERTAnweisungenINSERT ... SELECT * FROM OPENROWSET(BULK...)nicht unterstützt. Sie können mit der INSERT-Anweisung jedoch mehrere Zeilen in eine partitionierte Sicht einfügen.Note
Um eine partitionierte Ansicht zu aktualisieren, muss der Benutzer über Berechtigungen für
INSERTdie Mitgliedstabellen verfügenUPDATEDELETE.
Zusätzliche Bedingungen für verteilte partitionierte Ansichten
Für verteilte partitionierte Sichten (bei denen eine oder mehrere Mitgliedstabellen Remotetabellen sind), gelten zusätzlich die folgenden Bedingungen:
Eine verteilte Transaktion wird gestartet, um die Atomität über alle Knoten hinweg zu garantieren, die von dem Update betroffen sind.
Legen Sie die
XACT_ABORT SETOption fürONdie Funktionsweise vonINSERTAnweisungenUPDATEoder AnweisungenDELETEfest.Alle Spalten in Remotetabellen des Typs smallmoney, auf die in einer partitionierten Sicht verwiesen wird, werden als money zugeordnet. Daher müssen die entsprechenden Spalten (in der gleichen Ordnungsposition in der Auswahlliste) in den lokalen Tabellen auch den Typ money aufweisen.
Unter Datenbankkompatibilitätsgrad 110 und höher werden alle Spalten in Remotetabellen vom Typ smalldatetime, auf die in einer partitionierten Sicht verwiesen wird, als smalldatetime zugeordnet. Entsprechende Spalten in den lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen den Typ smalldatetime aufweisen. Dies ist eine Änderung des Verhaltens früherer Versionen von SQL Server, in denen sämtliche Spalten in Remotetabellen vom Typ smalldatetime, auf die in einer partitionierten Sicht verwiesen wird, als datetime zugeordnet werden. Die entsprechenden Spalten in lokalen Tabellen müssen den Typ datetime aufweisen. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).
Ein an der partitionierten Sicht beteiligter Verbindungsserver kann kein Loopback-Verbindungsserver sein. Dies ist ein Verbindungsserver, der auf dieselbe Instanz von SQL Server verweist.
Die Einstellung der SET ROWCOUNT Option wird für INSERT, UPDATEund DELETE Aktionen, die aktualisierbare partitionierte Ansichten und Remotetabellen umfassen, ignoriert.
Wenn die Mitgliedstabellen und die partitionierte Sichtdefinition vorhanden sind, erstellt der SQL Server-Abfrageoptimierer intelligente Pläne, die Abfragen zum effizienten Zugriff auf Daten in den Mitgliedstabellen verwenden. Mit den CHECK Einschränkungsdefinitionen ordnet der Abfrageprozessor die Verteilung der Schlüsselwerte in den Membertabellen zu. Wenn ein Benutzer eine Abfrage ausgibt, vergleicht der Abfrageprozessor die Zuordnung mit den in der WHERE Klausel angegebenen Werten und erstellt einen Ausführungsplan mit einer minimalen Menge an Datenübertragung zwischen Memberservern. Wenn sich daher einige Membertabellen auf Remoteservern befinden, löst die Sql Server-Instanz verteilte Abfragen auf, sodass die Menge der verteilten Daten, die übertragen werden müssen, minimal ist.
Überlegungen zur Replikation
Die folgenden Überlegungen sind erforderlich, wenn Sie partitionierte Sichten für Mitgliedstabellen erstellen, die an der Replikation beteiligt sind:
Wenn die zugrunde liegenden Tabellen an der Merge- oder Transaktionsreplikation mit Updateabonnements beteiligt sind, stellen Sie sicher, dass die Spalte uniqueidentifier ebenfalls in der Auswahlliste enthalten ist.
Alle
INSERTAktionen in der partitionierten Ansicht müssen einenNEWID()Wert für die UniqueIdentifier-Spalte bereitstellen. Alle UPDATE-Aktionen für die Eindeutigidentifiziererspalte müssen als Wert angegebenNEWID()werden, da das DEFAULT-Schlüsselwort nicht verwendet werden kann.Die Replikation von Updates, die mithilfe der Sicht ausgeführt werden, entspricht der Replikation von Tabellen in zwei verschiedenen Datenbanken: Die Tabellen werden von unterschiedlichen Replikations-Agents bedient, und die Reihenfolge der Updates ist nicht sichergestellt.
Permissions
Erfordert die CREATE VIEW-Berechtigung in der Datenbank und die ALTER-Berechtigung für das Schema, in dem die Sicht erstellt wird.
Examples
In den folgenden Beispielen wird die AdventureWorks2025 oder AdventureWorksDW2025-Datenbank verwendet.
A. Verwenden von CREATE VIEW zum Erstellen einer Ansicht
Im folgenden Beispiel wird mithilfe einer SELECT Anweisung eine Ansicht erstellt. Eine einfache Sicht ist hilfreich, wenn eine Kombination mehrerer Spalten häufig abgefragt wird. Die Daten aus dieser Ansicht stammen aus der HumanResources.EmployeePerson.Person AdventureWorks2025-Datenbank und den Tabellen. Mit diesen Daten werden Name und Einstellungsdatum der Mitarbeiter von Adventure Works Cycles bereitgestellt. Die Sicht könnte für die Person erstellt werden, die für die Nachverfolgung von Jubiläen verantwortlich ist. Dabei wird dieser Person nicht der Zugriff auf alle Daten dieser Tabellen gewährt.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. VERWENDEN MIT VERSCHLÜSSELUNG
Das folgende Beispiel verwendet die Option WITH ENCRYPTION und zeigt berechnete, umbenannte und mehrfache Spalten.
Gilt für: SQL Server 2008 (10.0.x) und höher sowie SQL-Datenbank
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
C. VERWENDEN DER OPTION "MIT ÜBERPRÜFEN"
Im folgenden Beispiel wird die Sicht mit dem Namen dbo.SeattleOnly gezeigt, die auf fünf Tabellen verweist und Datenänderungen nur bei Mitarbeitern zulässt, die in Seattle leben.
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. Verwenden von integrierten Funktionen in einer Ansicht
Das folgende Beispiel zeigt die Definition einer Sicht, die eine integrierte Funktion enthält. Wenn Sie Funktionen verwenden, müssen Sie für die abgeleitete Spalte einen Spaltennamen angeben.
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
E. Partitionierte Daten verwenden
Das folgende Beispiel verwendet Tabellen mit den Namen SUPPLY1, SUPPLY2, SUPPLY3 und SUPPLY4. Diese Tabellen entsprechen den Lieferantentabellen aus vier Büros, die sich in verschiedenen Regionen befinden.
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
--Create the view that combines all supplier tables.
CREATE VIEW dbo.all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
F. Erstellen einer Sicht durch Verknüpfen von zwei Tabellen
Im folgenden Beispiel wird eine Sicht mithilfe der Anweisung SELECT mit OUTER JOIN erstellt. Die Ergebnisse der JOIN-Abfrage füllen die Sicht auf.
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
Verwandte Inhalte
- ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- LÖSCHEN (Transact-SQL)
- DROP-ANSICHT (Transact-SQL)
- EINFÜGEN (Transact-SQL)
- Erstellen einer gespeicherten Prozedur
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (Transact-SQL)
- sp_help (Transact-SQL)
- sp_helptext (Transact-SQL)
- sp_refreshview (Transact-SQL)
- sp_rename (Transact-SQL)
- sys.views (Transact-SQL)
- AKTUALISIERUNG (Transact-SQL)
- EVENTDATA (Transact-SQL)