Freigeben über


column_constraint (Transact-SQL)

Aktualisiert: 12. Dezember 2006

Gibt die Eigenschaften einer PRIMARY KEY-, FOREIGN KEY-, UNIQUE- oder CHECK-Einschränkung an, die Teil einer neuen Spaltendefinition ist, die einer Tabelle mithilfe von ALTER TABLE hinzugefügt wird.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

[ CONSTRAINT constraint_name ] 
{ 
    [ NULL | NOT NULL ] 
    { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
                        WITH FILLFACTOR =fillfactor 
                  | WITH ( index_option [, ...n ] ) 
                ]
        [ ON { partition_scheme_name (partition_column_name) 
            | filegroup | "default" } ] 
    | [ FOREIGN KEY ] 
        REFERENCES [ schema_name . ] referenced_table_name 
            [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}

Argumente

  • CONSTRAINT
    Gibt den Beginn der Definition für eine PRIMARY KEY-, UNIQUE-, FOREIGN KEY- oder CHECK-Einschränkung an.
  • constraint_name
    Der Name der Einschränkung. Einschränkungsnamen müssen den Regeln für Bezeichner entsprechen, wobei der Name außerdem nicht mit einem Nummernzeichen (#) beginnen darf. Wenn constraint_name nicht angegeben ist, vergibt das System einen Namen für die Einschränkung.
  • NULL | NOT NULL
    Gibt an, ob die Spalte NULL-Werte akzeptiert. Spalten, die keine NULL-Werte zulassen, können nur hinzugefügt werden, wenn für sie ein Standardwert angegeben ist. Wenn die neue Spalte NULL-Werte zulässt und kein Standardwert angegeben ist, enthält sie einen NULL-Wert für jede Zeile in der Tabelle. Wenn die neue Spalte NULL-Werte zulässt und eine Standarddefinition mit der neuen Spalte hinzugefügt wird, kann die Option WITH VALUES verwendet werden, um den Standardwert in der neuen Spalte für jede vorhandene Zeile in der Tabelle zu speichern.

    Wenn die neue Spalte keine NULL-Werte zulässt, muss eine DEFAULT-Definition mit der neuen Spalte hinzugefügt werden. Die neue Spalte wird automatisch mit dem Standardwert in den neuen Spalten in jeder vorhandenen Zeile geladen.

    ms186712.Caution(de-de,SQL.90).gifVorsicht:
    Wenn das Hinzufügen einer Spalte Änderungen an den Datenzeilen einer Tabelle erfordert, wie z. B. das Hinzufügen von DEFAULT-Werten zu jeder Zeile, werden Sperren für die Tabelle aufrechterhalten, während ALTER TABLE ausgeführt wird. Dies beeinflusst die Möglichkeit, den Inhalt der Tabelle zu ändern, während die Sperre aktiviert ist. Dagegen ist das Hinzufügen einer Spalte, die NULL-Werte zulässt und für die kein Standardwert angegeben ist, lediglich ein Metadatenvorgang. In diesem Fall sind keine Sperren beteiligt.

    Wenn Sie CREATE TABLE oder ALTER TABLE verwenden, beeinflussen Datenbank- und Sitzungseinstellungen die NULL-Zulässigkeit des in einer Spaltendefinition verwendeten Datentyps und setzen sie möglicherweise außer Kraft. Es wird empfohlen, nicht berechnete Spalten stets explizit als NULL oder NOT NULL zu definieren oder, im Falle eines benutzerdefinierten Datentyps, zuzulassen, dass die Spalte die standardmäßige NULL-Zulässigkeit des Datentyps verwendet. Weitere Informationen finden Sie unter CREATE TABLE (Transact-SQL).

  • PRIMARY KEY
    Eine Einschränkung, die Entitätsintegrität für eine angegebene Spalte (oder Spalten) mithilfe eines eindeutigen Indexes erzwingt. Es kann nur eine PRIMARY KEY-Einschränkung für jede Tabelle erstellt werden.
  • UNIQUE
    Eine Einschränkung, die Entitätsintegrität für eine bestimmte Spalte (oder Spalten) mithilfe eines eindeutigen Indexes bereitstellt.
  • CLUSTERED | NONCLUSTERED
    Gibt an, dass ein gruppierter oder nicht gruppierter Index für die PRIMARY KEY- oder UNIQUE-Einschränkung erstellt wird. Für PRIMARY KEY-Einschränkungen wird standardmäßig CLUSTERED verwendet. Für UNIQUE-Einschränkungen wird standardmäßig NONCLUSTERED verwendet.

    Wenn bereits eine gruppierte Einschränkung oder ein gruppierter Index für eine Tabelle vorhanden ist, kann CLUSTERED nicht angegeben werden. Wenn bereits eine gruppierte Einschränkung oder ein gruppierter Index für eine Tabelle vorhanden ist, wird für PRIMARY KEY-Einschränkungen standardmäßig NONCLUSTERED verwendet.

    Spalten vom Datentyp ntext, text, varchar(max), nvarchar(max), varbinary(max), xml oder image können nicht als Spalten für einen Index angegeben werden.

  • WITH FILLFACTOR **=**fillfactor
    Gibt an, wie weit Microsoft SQL Server 2005-Datenbankmodul die einzelnen Indexseiten füllen soll, die zum Speichern der Indexdaten verwendet werden. Vom Benutzer angegebene Füllfaktorwerte können Zahlen zwischen 1 und 100 sein. Falls kein Wert angegeben wird, wird der Standardwert 0 verwendet.

    ms186712.note(de-de,SQL.90).gifWichtig:
    Das Verwenden von WITH FILLFACTOR = fillfactor als einzige Indexoption, die für die PRIMARY KEY- oder UNIQUE-Einschränkungen gilt, wird hier aus Gründen der Abwärtskompatibilität weiterhin dokumentiert. In zukünftigen Versionen wird dies jedoch nicht mehr in dieser Weise dokumentiert werden. In SQL Server 2005 können andere Indexoptionen in der index_option-Klausel der ALTER TABLE-Anweisung angegeben werden.
  • ON { partition_scheme_name**(partition_column_name)** | filegroup | "default"}
    Gibt den Speicherort des Indexes an, der für die Einschränkung erstellt wird. Wenn partition_scheme_name angegeben wird, wird der Index partitioniert, und die Partitionen werden den Dateigruppen zugeordnet, die durch partition_scheme_name angegeben sind. Wenn filegroup angegeben wird, wird der Index in der genannten Dateigruppe erstellt. Wenn "default" angegeben ist, oder wenn ON überhaupt nicht angegeben ist, wird der Index in derselben Dateigruppe wie die Tabelle erstellt. Wenn ON beim Hinzufügen eines gruppierten Indexes für eine PRIMARY KEY- oder UNIQUE-Einschränkung angegeben ist, wird die gesamte Tabelle beim Erstellen des gruppierten Indexes in die angegebene Dateigruppe verschoben.

    In diesem Zusammenhang ist DEFAULT kein Schlüsselwort. Es handelt sich dabei um einen Bezeichner für die Standarddateigruppe. Dieser muss wie in ON "default" oder ON [default] begrenzt sein. Wenn "default" angegeben ist, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt werden. Dies ist die Standardeinstellung. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

  • FOREIGN KEY REFERENCES
    Eine Einschränkung, die referenzielle Integrität für die Daten in der Spalte bereitstellt. FOREIGN KEY-Einschränkungen erfordern, dass jeder Wert in der Spalte in der angegebenen Spalte der Tabelle vorhanden ist, auf die verwiesen wird.
  • schema_name
    Der Name des Schemas, zu dem die Tabelle gehört, auf die mit der FOREIGN KEY-Einschränkung verwiesen wird.
  • referenced_table_name
    Die Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.
  • ref_column
    Eine Spalte in Klammern, auf die die neue FOREIGN KEY-Einschränkung verweist.
  • ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
    Gibt an, welche Aktion für Zeilen in der Tabelle, die geändert wird, ausgeführt werden soll, wenn diese Zeilen eine referenzielle Beziehung aufweisen und die Zeile, auf die verwiesen wird, aus der übergeordneten Tabelle gelöscht wird. Der Standardwert ist NO ACTION.

    • NO ACTION
      SQL Server-Datenbankmodul gibt einen Fehler aus, und für die Aktion zum Löschen der Zeile in der übergeordneten Tabelle wird ein Rollback ausgeführt.
    • CASCADE
      Entsprechende Zeilen werden aus der verweisenden Tabelle entfernt, falls diese Zeile aus der übergeordneten Tabelle gelöscht wird.
    • SET NULL
      Alle Werte des Fremdschlüssels werden auf NULL festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle gelöscht wird. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, damit diese Einschränkung ausgeführt wird.
    • SET DEFAULT
      Alle Werte des Fremdschlüssels werden auf die jeweiligen Standardwerte festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle gelöscht wird. Alle Fremdschlüsselspalten müssen Standarddefinitionen aufweisen, damit diese Einschränkung ausgeführt wird. Wenn eine Spalte NULL-Werte zulässt und kein expliziter Standardwert festgelegt ist, wird NULL zum impliziten Standardwert der Spalte.

    Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergepublikation einbezogen werden soll, bei der logische Datensätze verwendet werden. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.

    Die CASCADE-Aktion ON DELETE kann nicht definiert werden, wenn für ON DELETE bereits ein INSTEAD OF-Trigger für die Tabelle vorhanden ist, die geändert wird.

    In der AdventureWorks-Datenbank verfügt die ProductVendor-Tabelle z. B. über eine referenzielle Beziehung zur Vendor-Tabelle. Der ProductVendor.VendorID-Fremdschlüssel verweist auf den Vendor.VendorID-Primärschlüssel.

    Wenn eine DELETE-Anweisung für eine Zeile in der Vendor-Tabelle ausgeführt wird und eine ON DELETE CASCADE-Aktion für ProductVendor.VendorID festgelegt ist, sucht Datenbankmodul nach abhängigen Zeilen in der ProductVendor-Tabelle. Falls vorhanden, werden die abhängigen Zeilen in der ProductVendor-Tabelle gelöscht, ebenso wie die Zeile, auf die in der Vendor-Tabelle verwiesen wird.

    Wenn jedoch NO ACTION angegeben ist, gibt Datenbankmodul einen Fehler aus und führt für die Aktion zum Löschen der Vendor-Zeile ein Rollback aus, falls sich mindestens eine Zeile in der ProductVendor-Tabelle befindet, die darauf verweist.

  • ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
    Gibt an, welche Aktion für Zeilen in der geänderten Tabelle ausgeführt werden soll, wenn diese Zeilen eine referenzielle Beziehung aufweisen und die Zeile, auf die verwiesen wird, in der übergeordneten Tabelle aktualisiert wird. Der Standardwert ist NO ACTION.

    • NO ACTION
      Datenbankmodul gibt einen Fehler aus, und für die Aktion zum Aktualisieren der Zeile in der übergeordneten Tabelle wird ein Rollback ausgeführt.
    • CASCADE
      Entsprechende Zeilen werden in der verweisenden Tabelle aktualisiert, falls diese Zeile in der übergeordneten Tabelle aktualisiert wird.
    • SET NULL
      Alle Werte des Fremdschlüssels werden auf NULL festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle aktualisiert wird. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, damit diese Einschränkung ausgeführt wird.
    • SET DEFAULT
      Alle Werte des Fremdschlüssels werden auf die jeweiligen Standardwerte festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle aktualisiert wird. Alle Fremdschlüsselspalten müssen Standarddefinitionen aufweisen, damit diese Einschränkung ausgeführt wird. Wenn eine Spalte NULL-Werte zulässt und kein expliziter Standardwert festgelegt ist, wird NULL zum impliziten Standardwert der Spalte.

    Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergepublikation einbezogen werden soll, bei der logische Datensätze verwendet werden. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.

    Die CASCADE-Aktion ON UPDATE kann nicht definiert werden, wenn für ON UPDATE schon ein INSTEAD OF-Trigger für die Tabelle vorhanden ist, die geändert wird.

    In der AdventureWorks-Datenbank verfügt die ProductVendor-Tabelle z. B. über eine referenzielle Beziehung zur Vendor-Tabelle. Der ProductVendor.VendorID-Fremdschlüssel verweist auf den Vendor.VendorID-Primärschlüssel.

    Wenn eine UPDATE-Anweisung für eine Zeile in der Vendor-Tabelle ausgeführt wird und eine ON UPDATE CASCADE-Aktion für ProductVendor.VendorID festgelegt ist, sucht Datenbankmodul nach abhängigen Zeilen in der ProductVendor-Tabelle. Falls vorhanden, wird die abhängige Zeile in der ProductVendor-Tabelle aktualisiert, ebenso wie die Zeile, auf die in der Vendor-Tabelle verwiesen wird.

    Wenn jedoch NO ACTION angegeben ist, gibt Datenbankmodul einen Fehler aus und führt für die Aktion zum Aktualisieren der Vendor-Zeile ein Rollback aus, falls sich mindestens eine Zeile in der ProductVendor-Tabelle befindet, die darauf verweist.

  • CHECK
    Eine Einschränkung, die Domänenintegrität erzwingt, indem die möglichen Eingabewerte für eine oder mehrere Spalten beschränkt wird.
  • logical_expression
    Ein logischer Ausdruck, der in einer CHECK-Einschränkung verwendet wird und TRUE oder FALSE zurückgibt. Werden die CHECK-Einschränkungen zusammen mit logical_expression verwendet, kann nicht auf eine andere Tabelle, jedoch auf andere Spalten in derselben Tabelle für dieselbe Zeile verwiesen werden. Der Ausdruck kann keinen Verweis auf einen Aliasdatentyp enthalten.

Hinweise

Jede PRIMARY KEY- und UNIQUE-Einschränkung erzeugt einen Index. Die Anzahl der UNIQUE- und PRIMARY KEY-Einschränkungen darf nicht dazu führen, dass die Anzahl der Indizes der Tabelle 249 nicht gruppierte Indizes und 1 gruppierten Index übersteigt.

Beispiele

Beispiele finden Sie unter ALTER TABLE (Transact-SQL).

Siehe auch

Verweis

ALTER TABLE (Transact-SQL)
column_definition (Transact-SQL)

Andere Ressourcen

Steuern von Einschränkungen, Identitäten und Triggern mithilfe von NOT FOR REPLICATION

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Geänderter Inhalt:
  • Die Position der Klauseln WITH FILLFACTOR und WITH index_option im Syntaxdiagramm wurde erläutert.

14. April 2006

Neuer Inhalt:
  • Die Einschränkung bezüglich der Verwendung von CASCADE zusammen mit logischen Datensätzen für die Mergereplikation wurde dokumentiert.

05. Dezember 2005

Neuer Inhalt:
  • Der CHECK-Klausel im Syntaxdiagramm wurde (logical_expression ) hinzugefügt.
Geänderter Inhalt:
  • Die DEFAULT-Klausel wurde aus dem Syntaxdiagramm entfernt, da sie bereits unter column_definition angegeben ist.