Erstellen von Fremdschlüssel-BeziehungenCreate Foreign Key Relationships

GILT FÜR: JaSQL Server 2016 und höher JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data WarehouseAPPLIES TO: YesSQL Server 2016 and later YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

In diesem Artikel wird beschrieben, wie Fremdschlüsselbeziehungen in SQL Server 2019 (15.x)SQL Server 2019 (15.x) mithilfe von SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQLerstellt werden.This article describes how to create foreign key relationships in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Sie erstellen eine Beziehung zwischen zwei Tabellen, wenn Sie die Zeilen der einen Tabelle mit den Zeilen der anderen Tabelle verknüpfen möchten.You create a relationship between two tables when you want to associate rows of one table with rows of another.

VorbereitungsmaßnahmenBefore You Begin! EinschränkungenLimits and Restrictions

  • Eine FOREIGN KEY-Einschränkung muss nicht notwendigerweise mit einer PRIMARY KEY-Einschränkung in einer anderen Tabelle verknüpft sein; sie kann auch so definiert werden, dass sie auf die Spalten einer UNIQUE-Einschränkung in einer anderen Tabelle verweist.A foreign key constraint does not have to be linked only to a primary key constraint in another table; it can also be defined to reference the columns of a UNIQUE constraint in another table.

  • Wenn ein anderer Wert als NULL in die Spalte einer FOREIGN KEY-Einschränkung eingegeben wird, muss der Wert in der Spalte vorhanden sein, auf die verwiesen wird; andernfalls wird eine Fremdschlüsselverletzungs-Fehlermeldung zurückgegeben.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned. Um sicherzustellen, dass alle Werte einer zusammengesetzten FOREIGN KEY-Einschränkung überprüft werden, legen Sie NOT NULL für alle betroffenen Spalten fest.To make sure that all values of a composite foreign key constraint are verified, specify NOT NULL on all the participating columns.

  • FOREIGN KEY-Einschränkungen können nur auf Tabellen verweisen, die sich innerhalb derselben Datenbank auf demselben Server befinden.FOREIGN KEY constraints can reference only tables within the same database on the same server. Datenbankübergreifende referenzielle Integrität muss durch Trigger implementiert werden.Cross-database referential integrity must be implemented through triggers. Weitere Informationen finden Sie unter CREATE TRIGGER.For more information, see CREATE TRIGGER.

  • FOREIGN KEY-Einschränkungen können auf eine andere Spalte in derselben Tabelle verweisen.FOREIGN KEY constraints can reference another column in the same table. Ein solcher Verweis wird als Eigenverweis bezeichnet.This is referred to as a self-reference.

  • Eine auf Spaltenebene angegebene FOREIGN KEY-Einschränkung kann nur eine Verweisspalte auflisten.A FOREIGN KEY constraint specified at the column level can list only one reference column. Diese Spalte muss denselben Datentyp aufweisen wie die Spalte, für die die Einschränkung definiert wurde.This column must have the same data type as the column on which the constraint is defined.

  • Eine auf Tabellenebene angegebene FOREIGN KEY-Einschränkung muss ebenso viele Verweisspalten haben, wie sich Spalten in der Einschränkungsspaltenliste befinden.A FOREIGN KEY constraint specified at the table level must have the same number of reference columns as the number of columns in the constraint column list. Der Datentyp jeder Verweisspalte muss ebenfalls mit dem der entsprechenden Spalte in der Spaltenliste übereinstimmen.The data type of each reference column must also be the same as the corresponding column in the column list.

  • Das Datenbank-EngineDatabase Engine verfügt über keine vordefinierte Grenze hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen, die eine Tabelle, die auf andere Tabellen verweist, enthalten kann, oder hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen im Besitz anderer Tabellen, die auf eine bestimmte Tabelle verweisen.The Datenbank-EngineDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table. Nichtsdestotrotz ist die tatsächliche Anzahl von FOREIGN KEY-Einschränkungen , die verwendet werden können, durch die Hardwarekonfiguration und den Entwurf der Datenbank und der Anwendung begrenzt.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. Eine Tabelle kann auf maximal 253 andere Tabellen und Spalten als Fremdschlüssel (ausgehende Referenzen) verweisen.A table can reference a maximum of 253 other tables and columns as foreign keys (outgoing references). SQL Server 2016 (13.x)SQL Server 2016 (13.x) erhöht den Grenzwert für die Anzahl der anderen Tabellen und Spalten, die auf Spalten in einer einzelnen Tabelle (eingehende Referenzen) verweisen können, von 253 auf 10.000.increases the limit for the number of other table and columns that can reference columns in a single table (incoming references), from 253 to 10,000. (Kompatibilitätsgrad 130 oder höher erforderlich.) Für die Erhöhung gelten folgende Einschränkungen:(Requires at least 130 compatibility level.) The increase has the following restrictions:

    • Mehr als 253 Fremdschlüsselverweise werden nur für DELETE- und UPDATE- DML-Vorgänge unterstützt.Greater than 253 foreign key references are supported for DELETE and UPDATE DML operations. MERGE-Vorgänge werden nicht unterstützt.MERGE operations are not supported.
    • Auch eine Tabelle mit einem Fremdschlüsselverweis auf sich selbst ist auf 253 Fremdschlüsselverweise beschränkt.A table with a foreign key reference to itself is still limited to 253 foreign key references.
    • Für Columnstore-Indizes, speicheroptimierte Tabellen oder Stretch Database sind derzeit nicht mehr als 253 Fremdschlüsselverweise möglich.Greater than 253 foreign key references are not currently available for columnstore indexes, memory-optimized tables, or Stretch Database.
  • FOREIGN KEY-Einschränkungen werden nicht auf temporäre Tabellen angewendet.FOREIGN KEY constraints are not enforced on temporary tables.

  • Wenn ein Fremdschlüssel für eine Spalte eines CLR-benutzerdefinierten Typs definiert wird, muss die Implementierung des Typs eine binäre Sortierreihenfolge unterstützen.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.For more information, see CLR User-Defined Types.

  • Eine Spalte vom Typ varchar(max) kann nur dann in eine FOREIGN KEY-Einschränkung einbezogen werden, wenn der Primärschlüssel, auf den sie verweist, ebenfalls als Typ varchar(max) definiert ist.A column of type varchar(max) can participate in a FOREIGN KEY constraint only if the primary key it references is also defined as type varchar(max).

BerechtigungenPermissions

Zum Erstellen einer neuen Tabelle mit einem Fremdschlüssel sind die CREATE TABLE-Berechtigung für die Datenbank und die ALTER-Berechtigung für das Schema erforderlich, in dem die Tabelle erstellt wird.Creating a new table with a foreign key requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Zum Erstellen eines Fremdschlüssels für eine vorhandene Tabelle ist die ALTER-Berechtigung für die Tabelle erforderlich.Creating a foreign key in an existing table requires ALTER permission on the table.

Erstellen einer Fremdschlüsselbeziehung im Tabellen-DesignerCreate a foreign key relationship in Table Designer

Verwendung von SQL Server Management StudioUsing SQL Server Management Studio

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle, die sich auf der Fremdschlüsselseite der Beziehung befinden soll, und klicken Sie auf Entwerfen.In Object Explorer, right-click the table that will be on the foreign-key side of the relationship and click Design.

    Die Tabelle wird im Tabellen-Designergeöffnet.The table opens in Table Designer.

  2. Klicken Sie im Menü Tabellen-Designer auf Beziehungen.From the Table Designer menu, click Relationships.

  3. Klicken Sie im Dialogfeld Fremdschlüsselbeziehungen auf Hinzufügen.In the Foreign-key Relationships dialog box, click Add.

    Die Beziehung wird in der Liste Beziehung (ausgewählt) mit einem vom System bereitgestellten Namen im Format FK_<Tabellenname><Tabellenname> angezeigt, wobei Tabellenname der Name der Fremdschlüsseltabelle ist.The relationship appears in the Selected Relationship list with a system-provided name in the format FK<tablename>_<tablename>, where tablename is the name of the foreign key table.

  4. Klicken Sie in der Liste Ausgewählte Beziehung auf die Beziehung.Click the relationship in the Selected Relationship list.

  5. Klicken Sie im Datenblatt rechts auf Tabellen- und Spaltenspezifikation, und klicken Sie anschließend auf die rechts neben der Eigenschaft angezeigten Auslassungspunkte ( ... ).Click Tables and Columns Specification in the grid to the right and click the ellipses (...) to the right of the property.

  6. Wählen Sie im Dialogfeld Tabellen und Spalten in der Dropdownliste Primärschlüssel die Tabelle aus, die sich auf der Primärschlüsselseite der Beziehung befinden soll.In the Tables and Columns dialog box, in the Primary Key drop-down list, choose the table that will be on the primary-key side of the relationship.

  7. Wählen Sie im darunter angezeigten Datenblatt die Spalten aus, die für den Primärschlüssel der Tabelle verwendet werden sollen.In the grid beneath, choose the columns contributing to the table's primary key. Geben Sie in die jeweils links neben den einzelnen Spalten angrenzende Datenblattzelle die entsprechende Fremdschlüsselspalte aus der Fremdschlüsseltabelle ein.In the adjacent grid cell to the left of each column, choose the corresponding foreign-key column of the foreign-key table.

    DerTabellen-Designer schlägt einen Namen für die Beziehung vor.Table Designer suggests a name for the relationship. Wenn Sie diesen Namen ändern möchten, bearbeiten Sie den Inhalt des Textfelds Beziehungsname .To change this name, edit the contents of the Relationship Name text box.

  8. Klicken Sie auf OK , um die Beziehung zu erstellen.Choose OK to create the relationship.

Erstellen eines Fremdschlüssels in einer neuen TabelleCreate a foreign key in a new table

Verwenden von Transact-SQLUsing Transact-SQL

Im folgenden Beispiel wird eine Tabelle erstellt und eine Fremdschlüsseleinschränkung für die Spalte TempID definiert, die auf die Spalte SalesReasonID in der Tabelle Sales.SalesReason in der AdventureWorks-Datenbank verweist.The following example creates a table and defines a foreign key constraint on the column TempID that references the column SalesReasonID in the Sales.SalesReason table in the AdventureWorks database. Die Klauseln ON DELETE CASCADE und ON UPDATE CASCADE werden verwendet, um sicherzustellen, dass an der Sales.SalesReason -Tabelle vorgenommene Änderungen automatisch an die Tabelle Sales.TempSalesReason weitergegeben werden.The ON DELETE CASCADE and ON UPDATE CASCADE clauses are used to ensure that changes made to Sales.SalesReason table are automatically propagated to the Sales.TempSalesReason table.

CREATE TABLE Sales.TempSalesReason 
   (
      TempID int NOT NULL, Name nvarchar(50)
      , CONSTRAINT PK_TempSales PRIMARY KEY NONCLUSTERED (TempID)
      , CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
        REFERENCES Sales.SalesReason (SalesReasonID)
        ON DELETE CASCADE
        ON UPDATE CASCADE
   )
;

Erstellen eines Fremdschlüssels in einer vorhandenen TabelleCreate a foreign key in an existing table

Verwenden von Transact-SQLUsing Transact-SQL

Im folgenden Beispiel wird ein Fremdschlüssel für die Spalte TempID erstellt und auf die Spalte SalesReasonID in der Tabelle Sales.SalesReason in der AdventureWorks-Datenbank verwiesen.The following example creates a foreign key on the column TempID and references the column SalesReasonID in the Sales.SalesReason table in the AdventureWorks database.

ALTER TABLE Sales.TempSalesReason
   ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
      REFERENCES Sales.SalesReason (SalesReasonID)
      ON DELETE CASCADE
      ON UPDATE CASCADE
;

Weitere Informationen finden Sie unterFor more information, see: