CREATE VIEW (Transact-SQL)CREATE VIEW (Transact-SQL)

GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Erstellt eine virtuelle Tabelle, deren Inhalt (Spalten und Zeilen) durch eine Abfrage definiert wird.Creates a virtual table whose contents (columns and rows) are defined by a query. Verwenden Sie diese Anweisung, um in einer oder mehreren Tabellen in der Datenbank eine Sicht der Daten zu erstellen.Use this statement to create a view of the data in one or more tables in the database. Eine Sicht kann z. B. für folgende Zwecke verwendet werden:For example, a view can be used for the following purposes:

  • Um die Darstellung einer Datenbank für jeden einzelnen Benutzer einzuschränken, zu vereinfachen und anzupassen.To focus, simplify, and customize the perception each user has of the database.

  • 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.As a security mechanism by allowing users to access data through the view, without granting the users permissions to directly access the underlying base tables.

  • Um eine abwärtskompatible Schnittstelle zum Emulieren einer Tabelle bereitzustellen, deren Schema geändert wurde.To provide a backward compatible interface to emulate a table whose schema has changed.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
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 for Azure SQL Data Warehouse and 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>  

ArgumenteArguments

OR ALTEROR ALTER
Gilt für: Azure SQL-DatenbankAzure SQL Database und SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1).Applies to: Azure SQL-DatenbankAzure SQL Database and SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1).

Ändert die Sicht nur, sofern diese bereits vorhanden ist.Conditionally alters the view only if it already exists.

schema_nameschema_name
Ist der Name des Schemas, zu dem die Sicht gehört.Is the name of the schema to which the view belongs.

view_nameview_name
Der Name der Sicht.Is the name of the view. Sichtnamen müssen den Regeln für Bezeichner entsprechen.View names must follow the rules for identifiers. Das Angeben des Sichtbesitzernamens ist optional.Specifying the view owner name is optional.

columncolumn
Der Name, den eine Spalte in einer Sicht erhalten soll.Is the name to be used for a column in a view. Das Angeben eines Spaltennamens ist nur erforderlich, wenn eine Spalte von einem arithmetischen Ausdruck, einer Funktion oder einer Konstanten abgeleitet wird oder wenn zwei oder mehr Spalten sonst denselben Namen haben können (gewöhnlich aufgrund eines Joins) oder aber wenn für die Spalte in einer Sicht ein anderer Name angegeben ist als die Spalte, von der sie abgeleitet wurde.A column name is required only when a column is derived from an arithmetic expression, a function, or a constant; when two or more columns may otherwise have the same name, typically because of a join; or when a column in a view is specified a name different from that of the column from which it is derived. Spaltennamen können auch in der SELECT-Anweisung zugewiesen werden.Column names can also be assigned in the SELECT statement.

Wenn column nicht angegeben ist, erhalten die Spalten der Sicht dieselben Namen wie die in der SELECT-Anweisung angegebenen Spalten.If column is not specified, the view columns acquire the same names as the columns in the SELECT statement.

Hinweis

In den Spalten für die Sicht gelten die Berechtigungen für einen Spaltennamen über eine CREATE VIEW- oder ALTER VIEW-Anweisung hinaus, unabhängig von der Quelle der zugrunde liegenden Daten.In the columns for the view, the permissions for a column name apply across a CREATE VIEW or ALTER VIEW statement, regardless of the source of the underlying data. Wenn beispielsweise Berechtigungen für die SalesOrderID-Spalte in einer CREATE VIEW-Anweisung erteilt werden, kann die SalesOrderID-Spalte beispielsweise zu OrderRef mithilfe einer ALTER VIEW-Anweisung umbenannt werden und weiterhin über die mithilfe von SalesOrderID der Sicht zugeordneten Berechtigungen verfügen.For example, if permissions are granted on the SalesOrderID column in a CREATE VIEW statement, an ALTER VIEW statement can name the SalesOrderID column with a different column name, such as OrderRef, and still have the permissions associated with the view using SalesOrderID.

ASAS
Gibt die Aktionen an, die die Sicht ausführen soll.Specifies the actions the view is to perform.

select_statementselect_statement
Die SELECT-Anweisung, die die Sicht definiert.Is the SELECT statement that defines the view. In der Anweisung dürfen mehrere Tabellen und andere Sichten angegeben werden.The statement can use more than one table and other views. Sie müssen über die entsprechenden Berechtigungen verfügen, um aus den Objekten auszuwählen, auf die in der SELECT-Klausel der erstellten Sicht verwiesen wird.Appropriate permissions are required to select from the objects referenced in the SELECT clause of the view that is created.

Eine Sicht muss nicht unbedingt eine einfache Teilmenge der Zeilen und Spalten einer bestimmten Tabelle sein.A view does not have to be a simple subset of the rows and columns of one particular table. Mithilfe einer SELECT-Klausel beliebiger Komplexität kann auch eine Sicht erstellt werden, die mehr als eine Tabelle oder andere Sichten verwendet.A view can be created that uses more than one table or other views with a SELECT clause of any complexity.

In einer indizierten Sichtdefinition muss die SELECT-Anweisung aus einer nur eine Tabelle betreffenden Anweisung oder aus einer sich über mehrere Tabellen erstreckenden JOIN-Anweisung mit optionaler Aggregation bestehen.In an indexed view definition, the SELECT statement must be a single table statement or a multitable JOIN with optional aggregation.

In der SELECT-Klausel einer Sichtdefinition darf Folgendes nicht enthalten sein:The SELECT clauses in a view definition cannot include the following:

  • Eine ORDER BY-Klausel, es sei denn, eine TOP-Klausel ist in der Auswahlliste der SELECT-Anweisung vorhandenAn ORDER BY clause, unless there is also a TOP clause in the select list of the SELECT statement

    Wichtig

    Die ORDER BY-Klausel wird lediglich zur Ermittlung der Zeilen verwendet, die von der TOP- oder OFFSET-Klausel in der Sichtdefinition zurückgegeben werden.The ORDER BY clause is used only to determine the rows that are returned by the TOP or OFFSET clause in the view definition. Durch die ORDER BY-Klausel wird keine bestimmte Ergebnisreihenfolge bei der Abfrage der Sicht sichergestellt, es sei denn, in der Abfrage selbst ist ebenfalls ORDER BY angegeben.The ORDER BY clause does not guarantee ordered results when the view is queried, unless ORDER BY is also specified in the query itself.

  • Das INTO-SchlüsselwortThe INTO keyword

  • Die OPTION-KlauselThe OPTION clause

  • Ein Verweis auf eine temporäre Tabelle oder auf eine TabellenvariableA reference to a temporary table or a table variable.

Da select_statement die SELECT-Anweisung verwendet, ist es zulässig, die Hinweise <join_hint> und <table_hint> zu verwenden, wie in der FROM-Klausel angegeben.Because select_statement uses the SELECT statement, it is valid to use <join_hint> and <table_hint> hints as specified in the FROM clause. Weitere Informationen finden Sie unter FROM (Transact-SQL) und SELECT (Transact-SQL).For more information, see FROM (Transact-SQL) and SELECT (Transact-SQL).

In select_statement können Funktionen und mehrere SELECT-Anweisungen verwendet werden, die durch UNION oder UNION ALL getrennt sind.Functions and multiple SELECT statements separated by UNION or UNION ALL can be used in select_statement.

CHECK OPTIONCHECK OPTION
Erzwingt, dass alle für die Sicht ausgeführten Datenänderungsanweisungen den Kriterien entsprechen müssen, die innerhalb von select_statement festgelegt wurden.Forces all data modification statements executed against the view to follow the criteria set within select_statement. Wenn durch eine Sicht eine Zeile geändert wird, stellt WITH CHECK OPTION sicher, dass die Daten nach dem Ausführen eines Commits für die Änderung in der Sicht weiterhin angezeigt werden.When a row is modified through a view, the WITH CHECK OPTION makes sure the data remains visible through the view after the modification is committed.

Hinweis

Alle Updates, die direkt für die zugrunde liegenden Tabellen einer Sicht durchgeführt werden, werden nicht anhand der Sicht geprüft, auch wenn CHECK OPTION angegeben ist.Any updates performed directly to a view's underlying tables are not verified against the view, even if CHECK OPTION is specified.

ENCRYPTIONENCRYPTION
Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Verschlüsselt die Einträge in sys.syscomments, die den Text der CREATE VIEW-Anweisung enthalten.Encrypts the entries in sys.syscomments that contain the text of the CREATE VIEW statement. Mit WITH ENCRYPTION kann verhindert werden, dass die Sicht als Teil der SQL Server-Replikation veröffentlicht wird.Using WITH ENCRYPTION prevents the view from being published as part of SQL Server replication.

SCHEMABINDINGSCHEMABINDING
Bindet die Sicht an das Schema der zugrunde liegenden Basistabellen.Binds the view to the schema of the underlying table or tables. Wenn SCHEMABINDING angegeben ist, können an der/den Basistabelle(n) keine Änderungen vorgenommen werden, die die Sichtdefinition betreffen können.When SCHEMABINDING is specified, the base table or tables cannot be modified in a way that would affect the view definition. Zunächst muss die Sichtdefinition selbst geändert oder gelöscht werden, um Abhängigkeiten in der zu ändernden Tabelle zu entfernen.The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified. Wenn Sie SCHEMABINDING verwenden, muss select_statement die zweiteiligen Namen (schema . object) der Tabellen, Sicht oder benutzerdefinierten Funktionen einschließen, auf die verwiesen wird.When you use SCHEMABINDING, the select_statement must include the two-part names (schema.object) of tables, views, or user-defined functions that are referenced. Alle Objekte, auf die verwiesen wird, müssen in derselben Datenbank vorhanden sein.All referenced objects must be in the same database.

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.Views or tables that participate in a view created with the SCHEMABINDING clause cannot be dropped unless that view is dropped or changed so that it no longer has schema binding. Andernfalls löst Datenbank-EngineDatabase Engine einen Fehler aus.Otherwise, the Datenbank-EngineDatabase Engine raises an error. Darüber hinaus schlagen ALTER TABLE-Anweisungen für Tabellen fehl, die Bestandteil von Sichten mit Schemabindung sind, wenn diese Anweisungen die Sichtdefinition betreffen.Also, executing ALTER TABLE statements on tables that participate in views that have schema binding fail when these statements affect the view definition.

VIEW_METADATAVIEW_METADATA
Gibt an, dass die Instanz von SQL ServerSQL 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.Specifies that the instance of SQL ServerSQL Server will return to the DB-Library, ODBC, and OLE DB APIs the metadata information about the view, instead of the base table or tables, when browse-mode metadata is being requested for a query that references the view. Bei Metadaten des Durchsuchenmodus handelt es sich um zusätzliche Metadaten, die von der Instanz von SQL ServerSQL Server an diese clientseitigen APIs zurückgegeben werden.Browse-mode metadata is additional metadata that the instance of SQL ServerSQL Server returns to these client-side APIs. Mithilfe dieser Metadaten können die clientbasierten APIs aktualisierbare clientbasierte Cursors implementieren.This metadata enables the client-side APIs to implement updatable client-side cursors. Metadaten des Durchsuchenmodus enthalten Informationen zu der Basistabelle, zu der die Spalten im Resultset gehören.Browse-mode metadata includes information about the base table that the columns in the result set belong to.

Bei Sichten, die mit VIEW_METADATA erstellt wurden, geben die Metadaten des Durchsuchenmodus den Sichtnamen anstelle der Basistabellennamen zurück, wenn Spalten aus der Sicht im Resultset beschrieben werden.For views created with VIEW_METADATA, the browse-mode metadata returns the view name and not the base table names when it describes columns from the view in the result set.

Wenn eine Sicht mit WITH VIEW_METADATA erstellt wird, sind alle enthaltenen Spalten außer der Spalte timestamp aktualisierbar, wenn die Sicht den Trigger INSTEAD OF INSERT oder INSTEAD OF UPDATE aufweist.When a view is created by using WITH VIEW_METADATA, all its columns, except a timestamp column, are updatable if the view has INSTEAD OF INSERT or INSTEAD OF UPDATE triggers. Weitere Informationen zu aktualisierbaren Sichten finden Sie unter Hinweise.For more information about updatable views, see Remarks.

RemarksRemarks

Eine Sicht kann nur in der aktuellen Datenbank erstellt werden.A view can be created only in the current database. Bei CREATE VIEW muss es sich um die erste Anweisung in einem Abfragebatch handeln.The CREATE VIEW must be the first statement in a query batch. Für eine Sicht sind maximal 1.024 Spalten zulässig.A view can have a maximum of 1,024 columns.

Wenn eine Abfrage für eine Sicht durchgeführt wird, überprüft Datenbank-EngineDatabase 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.When querying through a view, the Datenbank-EngineDatabase Engine checks to make sure that all the database objects referenced anywhere in the statement exist and that they are valid in the context of the statement, and that data modification statements do not violate any data integrity rules. Schlägt eine Überprüfung fehl, wird eine Fehlermeldung zurückgegeben.A check that fails returns an error message. Andernfalls wird die Aktion in eine Aktion für die zugrunde liegende Tabelle bzw. Tabellen übersetzt.A successful check translates the action into an action against the underlying table or tables.

Wenn eine Sicht von einer Tabelle oder Sicht abhängt, die gelöscht wurde, erzeugt Datenbank-EngineDatabase Engine eine Fehlermeldung, wenn jemand versucht, die Sicht zu verwenden.If a view depends on a table or view that was dropped, the Datenbank-EngineDatabase Engine produces an error message when anyone tries to use the view. 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.If a new table or view is created and the table structure does not change from the previous base table to replace the one dropped, the view again becomes usable. Wenn sich die Struktur der neuen Tabelle oder Sicht ändert, muss die Sicht gelöscht und neu erstellt werden.If the new table or view structure changes, the view must be dropped and re-created.

Wenn eine Sicht nicht mit der SCHEMABINDING-Klausel erstellt wurde, führen Sie sp_refreshview aus, nachdem Änderungen an den der Sicht zugrunde liegenden Objekten vorgenommen wurden, die die Definition der Sicht betreffen.If a view is not created with the SCHEMABINDING clause, run sp_refreshview when changes are made to the objects underlying the view that affect the definition of the view. Andernfalls liefert die Abfrage der Sicht möglicherweise unerwartete Ergebnisse.Otherwise, the view might produce unexpected results when it is queried.

Beim Erstellen einer Sicht werden die Informationen zu dieser in den folgenden Katalogsichten gespeichert: sys.views, sys.columns und sys.sql_expression_dependencies.When a view is created, information about the view is stored in the following catalog views: sys.views, sys.columns, and sys.sql_expression_dependencies. Der Text der CREATE VIEW-Anweisung wird in der Katalogsicht sys.sql_modules gespeichert.The text of the CREATE VIEW statement is stored in the sys.sql_modules catalog view.

Das Ergebnis einer Abfrage, die einen Index für eine mit den Ausdrücken numeric oder float definierte Sicht verwendet, kann sich von einer ähnlichen Abfrage unterscheiden, die nicht den Index für die Sicht verwendet.A query that uses an index on a view defined with numeric or float expressions may have a result that is different from a similar query that does not use the index on the view. Dieser Unterschied kann durch Rundungsfehler während INSERT-, DELETE- oder UPDATE-Aktionen in den zugrunde liegenden Tabellen verursacht werden.This difference may be caused by rounding errors during INSERT, DELETE, or UPDATE actions on underlying tables.

Datenbank-EngineDatabase Engine speichert die Einstellungen für SET QUOTED_IDENTIFIER und SET ANSI_NULLS, wenn eine Sicht erstellt wird.The Datenbank-EngineDatabase Engine saves the settings of SET QUOTED_IDENTIFIER and SET ANSI_NULLS when a view is created. Diese Originaleinstellungen werden zum Analysieren der Sicht wiederhergestellt, wenn die Sicht verwendet wird.These original settings are used to parse the view when the view is used. Deshalb haben alle Clientsitzungseinstellungen für SET QUOTED_IDENTIFIER und SET ANSI_NULLS keine Auswirkungen auf die Sichtdefinition, wenn auf die Sicht zugegriffen wird.Therefore, any client-session settings for SET QUOTED_IDENTIFIER and SET ANSI_NULLS do not affect the view definition when the view is accessed.

Aktualisierbare SichtenUpdatable Views

Sie können die Daten einer zugrunde liegenden Basistabelle über eine Sicht ändern, wenn die folgenden Bedingungen erfüllt sind:You can modify the data of an underlying base table through a view, as long as the following conditions are true:

  • Alle Änderungen, einschließlich UPDATE-, INSERT- und DELETE-Anweisungen, dürfen nur von einer Basistabelle aus auf Spalten verweisen.Any modifications, including UPDATE, INSERT, and DELETE statements, must reference columns from only one base table.

  • Die Spalten, die in der Sicht geändert werden, müssen direkt auf die zugrunde liegenden Daten der Tabellenspalten verweisen.The columns being modified in the view must directly reference the underlying data in the table columns. Die Spalten können nicht auf andere Art abgeleitet werden, wie etwa über:The columns cannot be derived in any other way, such as through the following:

    • Eine Aggregatfunktion: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR und VARP.An aggregate function: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, and VARP.

    • Eine Berechnung.A computation. Die Spalte kann mit einem Ausdruck, der andere Spalten verwendet, nicht berechnet werden.The column cannot be computed from an expression that uses other columns. Spalten, die mithilfe der Mengenoperatoren UNION, UNION ALL, CROSSJOIN, EXCEPT und INTERSECT erstellt werden, werden berechnet und sind daher auch nicht aktualisierbar.Columns that are formed by using the set operators UNION, UNION ALL, CROSSJOIN, EXCEPT, and INTERSECT amount to a computation and are also not updatable.

  • Die geänderten Spalten sind von den GROUP BY-, HAVING- oder DISTINCT-Klauseln nicht betroffen.The columns being modified are not affected by GROUP BY, HAVING, or DISTINCT clauses.

  • In der Anweisung select_statement der Sicht wird TOP nicht zusammen mit der Klausel WITH CHECK OPTION verwendet.TOP is not used anywhere in the select_statement of the view together with the WITH CHECK OPTION clause.

Die vorigen Einschränkungen gelten, so wie für die Sicht selbst, für alle Unterabfragen in der FROM-Klausel der Sicht.The previous restrictions apply to any subqueries in the FROM clause of the view, just as they apply to the view itself. Im Allgemeinen muss Datenbank-EngineDatabase Engine Änderungen von der Sichtdefinition an einer Basistabelle eindeutig nachverfolgen können.Generally, the Datenbank-EngineDatabase Engine must be able to unambiguously trace modifications from the view definition to one base table. Weitere Informationen finden Sie unter Modify Data Through a View (Ändern von Daten über eine Sicht).For more information, see Modify Data Through a View.

Wenn Sie aufgrund der vorigen Einschränkungen die Daten nicht direkt über eine Sicht ändern können, sollten Sie die folgenden Optionen berücksichtigen:If the previous restrictions prevent you from modifying data directly through a view, consider the following options:

  • INSTEAD OF-TriggerINSTEAD OF Triggers

    Für eine Sicht können INSTEAD OF-Trigger erstellt werden, um sie aktualisierbar zu machen.INSTEAD OF triggers can be created on a view to make a view updatable. Der INSTEAD OF-Trigger wird anstelle der Datenänderungsanweisung ausgeführt, für die der Trigger definiert ist.The INSTEAD OF trigger is executed instead of the data modification statement on which the trigger is defined. Mithilfe dieses Triggers kann der Benutzer die Gruppe von Aktionen angeben, die erforderlich sind, um die Datenänderungsanweisung zu verarbeiten.This trigger lets the user specify the set of actions that must happen to process the data modification statement. Wenn also ein INSTEAD OF-Trigger einer Sicht für eine angegebene Datenänderungsanweisung (INSERT, UPDATE oder DELETE) vorhanden ist, ist die entsprechende Sicht über diese Anweisung aktualisierbar.Therefore, if an INSTEAD OF trigger exists for a view on a specific data modification statement (INSERT, UPDATE, or DELETE), the corresponding view is updatable through that statement. Weitere Informationen zu INSTEAD OF-Triggern finden Sie unter DML-Trigger.For more information about INSTEAD OF triggers, see DML Triggers.

  • Partitionierte SichtenPartitioned Views

    Wenn es sich bei der Sicht um eine partitionierte Sicht handelt, ist sie mit gewissen Einschränkungen aktualisierbar.If the view is a partitioned view, the view is updatable, subject to certain restrictions. Bei Bedarf unterscheidet Datenbank-EngineDatabase Engine zwischen lokalen partitionierten Sichten (als Sichten, bei denen sich alle beteiligten Tabellen und die jeweilige Sicht selbst auf derselben SQL ServerSQL Server-Instanz befinden) und verteilten partitionierten Sichten (als Sichten, bei denen sich mindestens eine der Tabellen auf einem anderen Server oder Remoteserver befindet).When it is needed, the Datenbank-EngineDatabase Engine distinguishes local partitioned views as the views in which all participating tables and the view are on the same instance of SQL ServerSQL Server, and distributed partitioned views as the views in which at least one of the tables in the view resides on a different or remote server.

Partitionierte SichtenPartitioned Views

Bei einer partitionierten Sicht handelt es sich um eine Sicht, die durch eine UNION ALL-Anweisung von Mitgliedstabellen definiert ist, die dieselbe Struktur aufweisen, jedoch getrennt voneinander in mehreren Tabellen entweder in derselben Instanz von SQL ServerSQL Server oder in einer Gruppe von eigenständigen Instanzen von SQL ServerSQL Server-Servern gespeichert sind, die vereinte Datenbankserver genannt werden.A partitioned view is a view defined by a UNION ALL of member tables structured in the same way, but stored separately as multiple tables in either the same instance of SQL ServerSQL Server or in a group of autonomous instances of SQL ServerSQL Server servers, called federated database servers.

Hinweis

Die bevorzugte Methode zum lokalen Partitionieren von Daten auf einem Server ist die mithilfe partitionierter Tabellen.The preferred method for partitioning data local to one server is through partitioned tables. Weitere Informationen finden Sie unter partitionierte Tabellen und Indizes.For more information, see Partitioned Tables and Indexes.

Beim Entwurf eines Partitionierungsschemas muss offensichtlich sein, welche Daten zu den einzelnen Partitionen gehören.In designing a partitioning scheme, it must be clear what data belongs to each partition. 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.For example, the data for the Customers table is distributed in three member tables in three server locations: Customers_33 on Server1, Customers_66 on Server2, and Customers_99 on Server3.

Eine partitionierte Sicht auf Server1 wird wie folgt definiert:A partitioned view on Server1 is defined in the following way:

--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:Generally, a view is said to be a partitioned view if it is of the following form:

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 SichtenConditions for Creating Partitioned Views

  1. Die SELECT-listThe select list

    • In der Spaltenliste der Sichtdefinition wählen Sie alle Spalten der Mitgliedstabellen aus.In the column list of the view definition, select all columns in the member tables.

    • Stellen Sie sicher, dass die Spalten an derselben Ordnungsposition jeder select list denselben Typ aufweisen, einschließlich Sortierungen.Ensure that the columns in the same ordinal position of each select list are of the same type, including collations. Es ist nicht ausreichend, wenn die Spalten implizit konvertierbar sind, wie dies für UNION generell der Fall ist.It is not sufficient for the columns to be implicitly convertible types, as is generally the case for UNION.

      Demnach muss mindestens eine Spalte (z. B. <col>) in allen SELECT-Listen an derselben Ordnungsposition vorhanden sein.Also, at least one column (for example <col>) must appear in all the select lists in the same ordinal position. Definieren Sie <col> so, dass die Mitgliedstabellen T1, ..., Tn über CHECK-Einschränkungen C1, ..., Cn verfügen, die entsprechend in <col> definiert sind.Define <col> in a way that the member tables T1, ..., Tn have CHECK constraints C1, ..., Cn defined on <col>, respectively.

      Die für C1 definierte Einschränkung T1 muss die folgende Form haben:Constraint C1 defined on table T1 must be of the following form:

      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änkungen C1, ..., Cn erfüllt, sodass die Einschränkungen eine Gruppe von getrennten oder nicht überlappenden Intervallen bilden.The constraints must be in such a way that any specified value of <col> can satisfy, at most, one of the constraints C1, ..., Cn so that the constraints form a set of disjointed or nonoverlapping intervals. Die <col>-Spalte, für die die getrennten Einschränkungen definiert sind, wird Partitionierungsspalte genannt.The column <col> on which the disjointed constraints are defined is called the partitioning column. Beachten Sie, dass die Partitionierungsspalte in den zugrunde liegenden Tabellen unterschiedliche Namen haben kann.Note that the partitioning column may have different names in the underlying tables. Die Einschränkungen müssen sich im enabled- und trusted-Status befinden, damit sie die zuvor genannten Bedingungen für die Partitionierungsspalte erfüllen.The constraints must be in an enabled and trusted state for them to meet the previously mentioned conditions of the partitioning column. Wenn die Einschränkungen deaktiviert sind, aktivieren Sie die Einschränkungsprüfung erneut mit der Option CHECK CONSTRAINT constraint_name von ALTER TABLE. Verwenden Sie die Option WITH CHECK, um die Einschränkungen zu überprüfen.If the constraints are disabled, re-enable constraint checking by using the CHECK CONSTRAINT constraint_name option of ALTER TABLE, and using the WITH CHECK option to validate them.

      Die folgenden Beispiele zeigen gültige Einschränkungsgruppen:The following examples show valid sets of constraints:

      { [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.The same column cannot be used multiple times in the select list.

  2. PartitionierungsspaltePartitioning column

    • Die Partitionierungsspalte ist Teil der PRIMARY KEY-Einschränkung der Tabelle.The partitioning column is a part of the PRIMARY KEY of the table.

    • Eine berechnete Spalte, eine Identitätspalte, eine Standardspalte oder eine timestamp-Spalte darf hierfür nicht verwendet werden.It cannot be a computed, identity, default, or timestamp column.

    • 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.If there is more than one constraint on the same column in a member table, the Database Engine ignores all the constraints and does not consider them when determining whether the view is a partitioned view. Damit die Bedingungen für partitionierte Sichten erfüllt werden, stellen Sie sicher, dass es für die Partitionierungsspalte nur eine Partitionierungseinschränkung gibt.To meet the conditions of the partitioned view, ensure that there is only one partitioning constraint on the partitioning column.

    • Für Partitionierungsspalten gelten keine Einschränkungen hinsichtlich der Aktualisierbarkeit.There are no restrictions on the updatability of the partitioning column.

  3. Mitgliedstabellen oder zugrunde liegende Tabellen T1, ..., TnMember tables, or underlying tables T1, ..., Tn

    • Bei den Tabellen kann es sich entweder um lokale Tabellen oder um Tabellen von anderen Computern handeln, auf denen SQL ServerSQL Server ausgeführt wird, auf die entweder über einen vierteiligen Namen oder einen OPENDATASOURCE- oder OPENROWSET-basierten Namen verwiesen wird.The tables can be either local tables or tables from other computers that are running SQL ServerSQL Server that are referenced either through a four-part name or an OPENDATASOURCE- or OPENROWSET-based name. Die OPENDATASOURCE- und OPENROWSET-Syntax kann zwar einen Tabellennamen angeben, nicht jedoch eine Pass-Through-Abfrage.The OPENDATASOURCE and OPENROWSET syntax can specify a table name, but not a pass-through query. Weitere Informationen finden Sie unter OPENDATASOURCE (Transact-SQL) und OPENROWSET (Transact-SQL).For more information, see OPENDATASOURCE (Transact-SQL) and OPENROWSET (Transact-SQL).

      Falls eine oder mehrere Mitgliedstabellen Remotetabellen sind, wird die Sicht verteilte partitionierte Sicht genannt, und es gelten zusätzliche Bedingungen.If one or more of the member tables are remote, the view is called distributed partitioned view, and additional conditions apply. Diese werden weiter unten in diesem Abschnitt beschrieben.They are described later in this section.

    • Eine Tabelle darf nicht zweimal in der Tabellengruppe enthalten sein, die mithilfe der UNION ALL-Anweisung kombiniert werden.The same table cannot appear two times in the set of tables that are being combined with the UNION ALL statement.

    • Die Mitgliedstabellen dürfen nicht über Indizes verfügen, die für berechnete Spalten der Tabelle erstellt werden.The member tables cannot have indexes created on computed columns in the table.

    • Für alle Mitgliedstabellen gilt, dass ihre PRIMARY KEY-Einschränkungen auf gleich vielen Spalten basieren.The member tables have all PRIMARY KEY constraints on the same number of columns.

    • Alle Mitgliedstabellen einer Sicht weisen dieselbe Einstellung für die ANSI-Auffüllung auf.All member tables in the view have the same ANSI padding setting. Diese Einstellung kann entweder mit der Option Benutzeroptionen in sp_configure oder mit der SET-Anweisung festgelegt werden.This can be set by using either the user options option in sp_configure or the SET statement.

Bedingungen für das Ändern von Daten in partitionierten SichtenConditions for Modifying Data in Partitioned Views

Die folgenden Einschränkungen gelten für Anweisungen, die Daten in partitionierten Sichten ändern:The following restrictions apply to statements that modify data in partitioned views:

  • Die INSERT-Anweisung stellt für alle Spalten in der Sicht Werte bereit, auch wenn die zugrunde liegenden Mitgliedstabellen über eine DEFAULT-Einschränkung für diese Spalten verfügen oder NULL-Werte zulassen.The INSERT statement supplies values for all the columns in the view, even if the underlying member tables have a DEFAULT constraint for those columns or if they allow for null values. Für diese Spalten in der Mitgliedstabelle, die über DEFAULT-Definitionen verfügen, können die Anweisungen nicht explizit das DEFAULT-Schlüsselwort verwenden.For those member table columns that have DEFAULT definitions, the statements cannot explicitly use the keyword DEFAULT.

  • Der in die Partitionierungsspalte eingefügte Wert erfüllt mindestens eine der zugrunde liegenden Einschränkungen. Andernfalls schlägt die INSERT-Aktion mit einer Einschränkungsverletzung fehl.The value being inserted into the partitioning column satisfies at least one of the underlying constraints; otherwise, the insert action will fail with a constraint violation.

  • In einer UPDATE-Anweisung darf das Schlüsselwort DEFAULT nicht als Wert in der SET-Klausel angegeben werden. Dies gilt selbst dann, wenn in der entsprechenden Mitgliedstabelle ein DEFAULT-Wert definiert ist.UPDATE statements cannot specify the DEFAULT keyword as a value in the SET clause, even if the column has a DEFAULT value defined in the corresponding member table.

  • Die in der Sicht enthaltenen Spalten, bei denen es sich um eine IDENTITY-Spalte in einer oder mehreren Mitgliedstabellen handelt, können nicht mit der INSERT- oder UPDATE-Anweisung geändert werden.Columns in the view that are an identity column in one or more of the member tables cannot be modified by using an INSERT or UPDATE statement.

  • Wenn eine der Mitgliedstabellen eine timestamp-Spalte enthält, können die Daten nicht durch eine INSERT- oder UPDATE-Anweisung geändert werden.If one of the member tables contains a timestamp column, the data cannot be modified by using an INSERT or UPDATE statement.

  • Wenn eine der Mitgliedstabellen einen Trigger oder eine ON UPDATE CASCADE/SET NULL/SET DEFAULT- oder ON DELETE CASCADE/SET NULL/SET DEFAULT-Einschränkung hat, kann die Sicht nicht geändert werden.If one of the member tables contains a trigger or an ON UPDATE CASCADE/SET NULL/SET DEFAULT or ON DELETE CASCADE/SET NULL/SET DEFAULT constraint, the view cannot be modified.

  • INSERT-, UPDATE- und DELETE-Aktionen für eine partitionierte Sicht sind nicht zulässig, wenn ein Selbstjoin mit derselben Sicht oder mit einer der Mitgliedstabelle in der Anweisung vorhanden ist.INSERT, UPDATE, and DELETE actions against a partitioned view are not allowed if there is a self-join with the same view or with any of the member tables in the statement.

  • Der Massenimport von Daten in eine partitionierte Sicht wird nicht unterstützt, wenn bcp, BULK INSERT oder INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisungen per Massenimport übertragen werden.Bulk importing data into a partitioned view is unsupported by bcp or the BULK INSERT and INSERT ... SELECT * FROM OPENROWSET(BULK...) statements. Sie können mit der INSERT-Anweisung jedoch mehrere Zeilen in eine partitionierte Sicht einfügen.However, you can insert multiple rows into a partitioned view by using the INSERT statement.

    Hinweis

    Zum Aktualisieren einer partitionierten Sicht benötigt der Benutzer INSERT-, UPDATE- und DELETE-Berechtigungen für die Mitgliedstabellen.To update a partitioned view, the user must have INSERT, UPDATE, and DELETE permissions on the member tables.

Zusätzliche Bedingungen für verteilte partitionierte SichtenAdditional Conditions for Distributed Partitioned Views

Für verteilte partitionierte Sichten (bei denen eine oder mehrere Mitgliedstabellen Remotetabellen sind), gelten zusätzlich die folgenden Bedingungen:For distributed partitioned views (when one or more member tables are remote), the following additional conditions apply:

  • Eine verteilte Transaktion wird gestartet, um die Unteilbarkeit bei allen durch die Aktualisierung betroffenen Knoten sicherzustellen.A distributed transaction will be started to guarantee atomicity across all nodes affected by the update.

  • Legen Sie die Option XACT_ABORT SET auf ON fest, damit INSERT-, UPDATE- oder DELETE-Anweisungen funktionieren.Set the XACT_ABORT SET option to ON for INSERT, UPDATE, or DELETE statements to work.

  • Alle Spalten in Remotetabellen des Typs smallmoney, auf die in einer partitionierten Sicht verwiesen wird, werden als money zugeordnet.Any columns in remote tables of type smallmoney that are referenced in a partitioned view are mapped as money. Daher müssen die entsprechenden Spalten (in der gleichen Ordnungsposition in der Auswahlliste) in den lokalen Tabellen auch den Typ money aufweisen.Therefore, the corresponding columns (in the same ordinal position in the select list) in the local tables must also be of type money.

  • 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.Under database compatibility level 110 and higher, any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. Entsprechende Spalten in den lokalen Tabellen (in derselben Ordnungsposition in der Auswahlliste) müssen den Typ smalldatetime aufweisen.Corresponding columns (in the same ordinal position in the select list) in the local tables must be smalldatetime. Dies ist eine Änderung des Verhaltens früherer Versionen von SQL ServerSQL 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.This is a change in behavior from earlier versions of SQL ServerSQL Server in which any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime and corresponding columns in local tables must be of type datetime. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

  • Ein an der partitionierten Sicht beteiligter Verbindungsserver kann kein Loopback-Verbindungsserver sein.Any linked server in the partitioned view cannot be a loopback linked server. Dies ist ein Verbindungsserver, der auf dieselbe Instanz von SQL ServerSQL Server verweist.This is a linked server that points to the same instance of SQL ServerSQL Server.

Die Einstellung der Option SET ROWCOUNT wird für INSERT-, UPDATE- und DELETE-Aktionen ignoriert, die aktualisierbare partitionierte Sichten und Remotetabellen betreffen.The setting of the SET ROWCOUNT option is ignored for INSERT, UPDATE, and DELETE actions that involve updatable partitioned views and remote tables.

Wenn die Mitgliedstabellen und die partitionierte Sichtdefinition vorhanden sind, erstellt der SQL ServerSQL Server-Abfrageoptimierer intelligente Pläne, die Abfragen zum effizienten Zugriff auf Daten in den Mitgliedstabellen verwenden.When the member tables and partitioned view definition are in place, the SQL ServerSQL Server query optimizer builds intelligent plans that use queries efficiently to access data from member tables. Mit den CHECK-Einschränkungsdefinitionen kann der Abfrageprozessor die Verteilung der Schlüsselwerte den Mitgliedstabellen zuordnen.With the CHECK constraint definitions, the query processor maps the distribution of key values across the member tables. Wenn ein Benutzer eine Abfrage ausgibt, vergleicht der Abfrageprozessor die Zuordnung mit den in der WHERE-Klausel angegebenen Werten und erstellt einen Ausführungsplan, für den nur eine minimale Menge an Daten zwischen den Mitgliedsservern übertragen werden muss.When a user issues a query, the query processor compares the map to the values specified in the WHERE clause, and builds an execution plan with a minimal amount of data transfer between member servers. Obwohl einige Mitgliedstabellen möglicherweise auf Remoteservern gespeichert sind, löst die Instanz von SQL ServerSQL Server daher verteilte Abfragen so auf, dass nur eine minimale Menge von verteilten Daten übertragen werden muss.Therefore, although some member tables may be located in remote servers, the instance of SQL ServerSQL Server resolves distributed queries so that the amount of distributed data that has to be transferred is minimal.

Überlegungen zur ReplikationConsiderations for Replication

Die folgenden Überlegungen sind erforderlich, wenn Sie partitionierte Sichten für Mitgliedstabellen erstellen, die an der Replikation beteiligt sind:To create partitioned views on member tables that are involved in replication, the following considerations apply:

  • 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.If the underlying tables are involved in merge replication or transactional replication with updating subscriptions, ensure that the uniqueidentifier column is also included in the select list.

    Alle INSERT-Aktionen für die partitionierte Sicht müssen einen NEWID()-Wert für die Spalte uniqueidentifier bereitstellen.Any INSERT actions into the partitioned view must provide a NEWID() value for the uniqueidentifier column. Alle UPDATE-Aktionen für die Spalte uniqueidentifier müssen NEWID() als Wert bereitstellen, da das DEFAULT-Schlüsselwort nicht verwendet werden kann.Any UPDATE actions against the uniqueidentifier column must supply NEWID() as the value because the DEFAULT keyword cannot be used.

  • 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.The replication of updates made by using the view is the same as when tables are replicated in two different databases: the tables are served by different replication agents and the order of the updates is not guaranteed.

BerechtigungenPermissions

Erfordert die CREATE VIEW-Berechtigung in der Datenbank und die ALTER-Berechtigung für das Schema, in dem die Sicht erstellt wird.Requires CREATE VIEW permission in the database and ALTER permission on the schema in which the view is being created.

BeispieleExamples

In den folgenden Beispielen werden die Datenbanken „AdventureWorks 2012“ und „AdventureWorksDW“ verwendet.The following examples use the AdventureWorks 2012 or AdventureWorksDW database.

A.A. Verwenden einer einfachen CREATE VIEW-AnweisungUsing a simple CREATE VIEW

Im folgenden Beispiel wird mithilfe einer einfachen SELECT-Anweisung eine Sicht erstellt.The following example creates a view by using a simple SELECT statement. Eine einfache Sicht ist hilfreich, wenn eine Kombination mehrerer Spalten häufig abgefragt wird.A simple view is helpful when a combination of columns is queried frequently. Die Daten dieser Sicht stammen aus den HumanResources.Employee- und Person.Person-Tabellen der AdventureWorks2012AdventureWorks2012-Datenbank.The data from this view comes from the HumanResources.Employee and Person.Person tables of the AdventureWorks2012AdventureWorks2012 database. Mit diesen Daten werden Name und Einstellungsdatum der Mitarbeiter von Adventure Works CyclesAdventure Works Cycles bereitgestellt.The data provides name and hire date information for the employees of Adventure Works CyclesAdventure Works Cycles. 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.The view could be created for the person in charge of tracking work anniversaries but without giving this person access to all the data in these tables.

CREATE VIEW hiredate_view  
AS   
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate  
FROM HumanResources.Employee e   
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  
  

B.B. Verwenden von WITH ENCRYPTIONUsing WITH ENCRYPTION

Das folgende Beispiel verwendet die Option WITH ENCRYPTION und zeigt berechnete, umbenannte und mehrfache Spalten.The following example uses the WITH ENCRYPTION option and shows computed columns, renamed columns, and multiple columns.

Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017 und SQL-DatenbankSQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and SQL-DatenbankSQL Database.

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.C. Verwenden von WITH CHECK OPTIONUsing WITH CHECK OPTION

Im folgenden Beispiel wird die Sicht mit dem Namen SeattleOnly gezeigt, die auf fünf Tabellen verweist und Datenänderungen nur bei Mitarbeitern zulässt, die in Seattle leben.The following example shows a view named SeattleOnly that references five tables and allows for data modifications to apply only to employees who live in Seattle.

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.D. Verwenden integrierter Funktionen innerhalb einer SichtUsing built-in functions within a view

Das folgende Beispiel zeigt die Definition einer Sicht, die eine integrierte Funktion enthält.The following example shows a view definition that includes a built-in function. Wenn Sie Funktionen verwenden, müssen Sie für die abgeleitete Spalte einen Spaltennamen angeben.When you use functions, you must specify a column name for the derived column.

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.E. Verwenden von partitionierten DatenUsing partitioned data

Das folgende Beispiel verwendet Tabellen mit den Namen SUPPLY1, SUPPLY2, SUPPLY3 und SUPPLY4.The following example uses tables named SUPPLY1, SUPPLY2, SUPPLY3, and SUPPLY4. Diese Tabellen entsprechen den Lieferantentabellen von vier Büros in verschiedenen Ländern/Regionen.These tables correspond to the supplier tables from four offices, located in different countries/regions.

--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: SQL Data WarehouseSQL Data Warehouse und Parallel Data WarehouseParallel Data Warehouse.Examples: SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

F.F. Erstellen einer einfachen SichtCreating a simple view

Im folgenden Beispiel wird eine Sicht erstellt, in dem nur einige Spalten aus der Quelltabelle gewählt werden.The following example creates a view by selecting only some of the columns from the source table.

CREATE VIEW DimEmployeeBirthDates AS  
SELECT FirstName, LastName, BirthDate   
FROM DimEmployee;  

G.G. Erstellen einer Sicht durch Verknüpfen von zwei TabellenCreate a view by joining two tables

Im folgenden Beispiel wird eine Sicht mithilfe der Anweisung SELECT mit OUTER JOIN erstellt.The following example creates a view by using a SELECT statement with an OUTER JOIN. Die Ergebnisse der JOIN-Abfrage füllen die Sicht auf.The results of the join query populate the view.

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);  

Weitere InformationenSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL) ALTER VIEW (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
DROP VIEW (Transact-SQL) DROP VIEW (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
Erstellen einer gespeicherten Prozedur Create a Stored Procedure
sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL) sys.dm_sql_referencing_entities (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helptext (Transact-SQL) sp_helptext (Transact-SQL)
sp_refreshview (Transact-SQL) sp_refreshview (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sys.views (Transact-SQL) sys.views (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)