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
Azure SQL Managed Instance
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Verwenden Sie ALTER TABLE, um die Eigenschaften eines PRIMARY KEY anzugeben, UNIQUE, FOREIGN KEY, CHECK Constraint oder DEFAULT Definition, die Sie einer Tabelle mithilfe von ALTER TABLE (Transact-SQL) hinzufügen.
Transact-SQL Syntaxkonventionen
Syntax
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
(column [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
[ WITH ( <index_option>[ , ...n ] ) ]
[ ON { partition_scheme_name ( partition_column_name ... )
| filegroup | "default" } ]
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CONNECTION
( { node_table TO node_table }
[ , {node_table TO node_table }]
[ , ...n ]
)
[ ON DELETE { NO ACTION | CASCADE } ]
| DEFAULT constant_expression FOR column [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Arguments
CONSTRAINT
Gibt den Anfang einer Definition für ein PRIMARY KEY, , , FOREIGN KEYoder eine Einschränkung oder CHECK eine DEFAULTUNIQUE.
Einschränkungsname
Der Name der Einschränkung. Einschränkungsnamen müssen den Regeln für Bezeichner entsprechen, mit der Ausnahme, dass der Name nicht mit einem Nummernzeichen (#) beginnen kann. Wenn Sie nicht angeben constraint_name, weist das System der Einschränkung einen generierten Namen zu.
PRIMÄRSCHLÜSSEL
Eine Einschränkung, die die Entitätsintegrität für eine angegebene Spalte oder Spalten mithilfe eines eindeutigen Indexes erzwingt. Sie können nur eine PRIMARY KEY Einschränkung für jede Tabelle erstellen.
UNIQUE
Eine Einschränkung, die die Entitätsintegrität für eine angegebene Spalte oder Spalten mithilfe eines eindeutigen Indexes bereitstellt.
GRUPPIERT | NICHT GRUPPIERT
Gibt an, dass für die PRIMARY KEY oder die Einschränkung ein gruppierter oder UNIQUE nicht gruppierter Index erstellt wird.
PRIMARY KEY Einschränkungen werden standardmäßig auf CLUSTERED.
UNIQUE Einschränkungen werden standardmäßig auf NONCLUSTERED.
Wenn eine gruppierte Einschränkung oder ein Index bereits in einer Tabelle vorhanden ist, können Sie nicht angeben CLUSTERED. Wenn eine gruppierte Einschränkung oder ein Index bereits in einer Tabelle vorhanden ist, werden PRIMARY KEY Einschränkungen standardmäßig auf NONCLUSTERED.
Sie können keine Spalten angeben, die den Datentyp "ntext", " text", "varchar(max)", "nvarchar(max)", "varbinary(max)", "xml" oder "image " als Spalten für einen Index aufweisen.
Spalte
Eine Spalte oder Liste von Spalten, die in Klammern angegeben sind, die Sie in einer neuen Einschränkung verwenden.
[ ASC | DESC ]
Gibt die Reihenfolge an, in der die Spalte oder die Spalten, die in der Tabelleneinschränkung enthalten sind, sortiert werden. Der Standardwert ist die aufsteigende Sortierreihenfolge (ASC).
MIT FILLFAKTOR = FILLFAKTOR
Gibt an, wie voll die Datenbank-Engine jede Indexseite zum Speichern der Indexdaten machen soll. Vom Benutzer angegebene fillfactor-Werte können Zahlen von 1 bis 100 sein. Wenn Sie keinen Wert angeben, ist der Standardwert 0.
Aus Gründen der Abwärtskompatibilität enthält WITH FILLFACTOR = <fillfactor> diese Dokumentation die einzige Indexoption, die für oder UNIQUE Einschränkungen giltPRIMARY KEY. Diese Syntax wird in zukünftigen Versionen nicht dokumentiert. Sie können in der index_option Klausel von ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Gilt für: SQL Server 2008 (10.0.x) und höhere Versionen.
Gibt den Speicherort des Indexes an, der für die Einschränkung erstellt wurde. Wenn Sie partition_scheme_name angeben, wird der Index partitioniert, und die Partitionen werden den dateigruppen zugeordnet, die partition_scheme_name angibt. Wenn Sie die Dateigruppe angeben, wird der Index in der benannten Dateigruppe erstellt. Wenn Sie "Standard" angeben oder überhaupt nicht angeben ON , wird der Index in derselben Dateigruppe wie die Tabelle erstellt. Wenn Sie angeben ON , wenn Sie einen gruppierten Index für eine PRIMARY KEY oder UNIQUE eine Einschränkung hinzufügen, wird die gesamte Tabelle in die angegebene Dateigruppe verschoben, wenn der gruppierte Index erstellt wird.
In diesem Zusammenhang ist der Standardwert kein Schlüsselwort; Es handelt sich um einen Bezeichner für die Standarddateigruppe und muss wie in ON"Standard" oder ON[Standard] getrennt werden. Wenn Sie "Default" angeben, muss die QUOTED_IDENTIFIER Option für die aktuelle Sitzung sein ON . Dies ist die Standardeinstellung.
FREMDSCHLÜSSELVERWEISE
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 in der referenzierten Tabelle vorhanden ist.
referenced_table_name
Die Tabelle, auf die durch die FOREIGN KEY Einschränkung verwiesen wird.
ref_column
Eine Spalte oder Liste von Spalten in Klammern, auf die durch die neue FOREIGN KEY Einschränkung verwiesen wird.
AUF LÖSCHEN { KEINE AKTION | CASCADE | SET-NULL | DEFAULT SETZEN }
Gibt an, welche Aktion mit Zeilen in der Tabelle geschieht, die Sie ändern, wenn diese Zeilen über eine referenzielle Beziehung verfügen und die zeile, auf die verwiesen wird, aus der übergeordneten Tabelle gelöscht wird. Der Standardwert lautet NO ACTION.
KEINE AKTION
Die SQL Server-Datenbank-Engine löst einen Fehler aus und setzt die Löschaktion in der Zeile in der übergeordneten Tabelle zurück.
CASCADE
Löscht entsprechende Zeilen aus der referenzierenden Tabelle, wenn Sie diese Zeile aus der übergeordneten Tabelle löschen.
MENGE NULL
Legt alle Werte fest, aus denen der Fremdschlüssel NULL besteht, wenn Sie die entsprechende Zeile in der übergeordneten Tabelle löschen. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, um diese Einschränkung auszuführen.
DEFAULT SETZEN
Legt alle Werte fest, die den Fremdschlüssel auf ihre Standardwerte umfassen, wenn Sie die entsprechende Zeile in der übergeordneten Tabelle löschen. Alle Fremdschlüsselspalten müssen Standarddefinitionen aufweisen, damit diese Einschränkung ausgeführt wird. Wenn eine Spalte nullfähig ist und kein expliziter Standardwert festgelegt ist, NULL wird der implizite Standardwert der Spalte.
Geben Sie nicht an CASCADE , ob die Tabelle in einer Zusammenführungsveröffentlichung enthalten ist, die logische Datensätze verwendet. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.
Sie können nicht definieren ON DELETE CASCADE , ob in der Tabelle, die Sie ändern, bereits ein INSTEAD OF Trigger ON DELETE vorhanden ist.
In der AdventureWorks2025-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 Sie eine DELETE-Anweisung für eine Zeile in der Tabelle Vendor ausführen und eine ON DELETE CASCADE-Aktion für ProductVendor.VendorID angeben, sucht die Datenbank-Engine nach einer oder mehreren abhängigen Zeilen in der ProductVendor Tabelle. Wenn vorhanden, werden die abhängigen Zeilen in der ProductVendor Tabelle zusätzlich zu der Zeile gelöscht, auf die in der Vendor Tabelle verwiesen wird.
Wenn Sie dagegen NO ACTION angeben, löst die Datenbank-Engine einen Fehler aus und setzt die Löschaktion in der Zeile Vendor zurück, wenn mindestens eine Zeile in der ProductVendor Tabelle vorhanden ist, die darauf verweist.
AUF UPDATE { KEINE AKTION | CASCADE | SET-NULL | DEFAULT SETZEN }
Gibt an, welche Aktion mit Zeilen in der Tabelle geschieht, die Sie ändern, wenn diese Zeilen über eine referenzielle Beziehung verfügen und die referenzierte Zeile in der übergeordneten Tabelle aktualisieren. Der Standardwert lautet NO ACTION.
KEINE AKTION
Der Datenbank-Engine löst einen Fehler aus, und die Aktualisierungsaktion für die Zeile in der übergeordneten Tabelle wird zurückgesetzt.
CASCADE
Wenn diese Zeile in der übergeordneten Tabelle aktualisiert wird, werden die entsprechenden Zeilen in der verweisenden Tabelle aktualisiert.
MENGE NULL
Legt alle Werte fest, die den Fremdschlüssel NULL bilden, wenn Sie die entsprechende Zeile in der übergeordneten Tabelle aktualisieren. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, um diese Einschränkung auszuführen.
DEFAULT SETZEN
Alle Werte, aus denen sich der Fremdschlüssel zusammensetzt, werden auf die 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 nullfähig ist und kein expliziter Standardwert festgelegt ist, NULL wird der implizite Standardwert der Spalte.
Geben Sie nicht an CASCADE , ob die Tabelle in einer Zusammenführungsveröffentlichung enthalten ist, die logische Datensätze verwendet. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.
ON UPDATE CASCADE, SET NULLoder SET DEFAULT kann nicht definiert werden, wenn bereits ein INSTEAD OF Trigger ON UPDATE in der Tabelle vorhanden ist, die geändert wird.
In der AdventureWorks2025-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 Sie eine UPDATE-Anweisung für eine Zeile in der Tabelle Vendor ausführen und eine ON UPDATE CASCADE Aktion für ProductVendor.VendorID angeben, sucht die Datenbank-Engine nach mindestens einem abhängigen Zeilen in der ProductVendor Tabelle. Wenn vorhanden, wird die abhängige Zeile in der ProductVendor Tabelle aktualisiert, sowie die Zeile, auf die in der Vendor Tabelle verwiesen wird.
Wenn Sie dagegen NO ACTION angeben, löst die Datenbank-Engine einen Fehler aus und setzt die Aktualisierungsaktion in der Zeile Vendor zurück, wenn in der ProductVendor Tabelle, die darauf verweist, mindestens eine Zeile vorhanden ist.
NICHT FÜR REPLIKATION
Gilt für: SQL Server 2008 (10.0.x) und höhere Versionen.
Wenn Sie diese Klausel für eine Einschränkung angeben, erzwingen Replikations-Agents die Einschränkung nicht, wenn sie Schreibvorgänge ausführen. Sie können diese Klausel für FOREIGN KEY Einschränkungen und CHECK Einschränkungen angeben.
CONNECTION
Gibt das Knotentabellenpaar an, für das die angegebene Randeinschränkung eine Verbindung herstellen darf.
ON DELETE Gibt an, was mit den Zeilen in der Randtabelle geschieht, wenn die Knoten, die der Rand verbindet, gelöscht werden.
DEFAULT
Gibt den Standardwert für die Spalte an. Verwenden Sie DEFAULT Definitionen, um Werte für eine neue Spalte in den vorhandenen Datenzeilen bereitzustellen. Sie können Spalten, die einen Timestamp-Datentyp, eine IDENTITY Eigenschaft, eine vorhandene DEFAULT Definition oder einen gebundenen Standardwert aufweisen, keine Definitionen hinzufügenDEFAULT. Wenn die Spalte über einen vorhandenen Standardwert verfügt, müssen Sie die Standardeinstellung ablegen, bevor Sie einen neuen Standardwert hinzufügen können. Wenn Sie einen Standardwert für eine benutzerdefinierte Typspalte angeben, sollte der Typ eine implizite Konvertierung von constant_expression in den benutzerdefinierten Typ unterstützen. Um die Kompatibilität mit früheren Versionen von SQL Server aufrechtzuerhalten, können Sie einem DEFAULT einen Einschränkungsnamen zuweisen.
Constant_expression
Ein Literalwert, eine NULLoder eine Systemfunktion, die Sie als Standardspaltenwert verwenden. Wenn Sie constant_expression in Verbindung mit einer Spalte verwenden, die einen benutzerdefinierten Microsoft .NET Framework-Typ aufweisen soll, muss die Implementierung des Typs eine implizite Konvertierung aus dem constant_expression in den benutzerdefinierten Typ unterstützen.
FOR-Spalte
Gibt die Spalte an, die einer Definition auf Tabellenebene DEFAULT zugeordnet ist.
MIT WERTEN
Wenn Sie eine Spalte und eine
DEFAULTEinschränkung hinzufügen, legt die Verwendung desWITH VALUESWerts der neuen Spalte für vorhandene Zeilen den inDEFAULTconstant_expression angegebenen Wert fest, wenn die Spalte Nullen zulässt.Wenn die hinzuzufügende Spalte keine Nullwerte zulässt, wird der Wert der Spalte für vorhandene Zeilen immer auf den wert festgelegt, der
DEFAULTim Konstantenausdruck angegeben wird.
In SQL Server 2012 und höheren Versionen kann dieser Vorgang ein Metadatenvorgang adding-not-null-columns-as-an-online-operation sein.
Wenn Sie verwenden WITH VALUES , wenn die verknüpfte Spalte nicht ebenfalls hinzugefügt wird, hat sie keine Auswirkung.
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, die zurückgegeben oder zurückgegeben TRUE wird FALSE.
logical_expression , die mit CHECK Einschränkungen verwendet werden, können nicht auf eine andere Tabelle verweisen, sondern auf andere Spalten in derselben Tabelle für dieselbe Zeile verweisen. Der Ausdruck kann nicht auf einen Aliasdatentyp verweisen.
Remarks
Wenn Sie Einschränkungen hinzufügen oder CHECK einschränkungen hinzufügenFOREIGN KEY, überprüft das System alle vorhandenen Daten auf Einschränkungsverletzungen, es sei denn, Sie geben die WITH NOCHECK Option an. Wenn Verstöße auftreten, ALTER TABLE tritt ein Fehler auf und gibt einen Fehler zurück. Wenn Sie einer vorhandenen Spalte eine neue PRIMARY KEY oder UNIQUE Einschränkung hinzufügen, müssen die Daten in der Spalte oder Spalte eindeutig sein. Wenn doppelte Werte gefunden werden, ALTER TABLE schlägt ein Fehler fehl. Die WITH NOCHECK Option hat keine Auswirkung, wenn Sie Einschränkungen hinzufügen PRIMARY KEY oder UNIQUE festlegen.
Jede PRIMARY KEY Einschränkung UNIQUE generiert einen Index. Die Anzahl von UNIQUE Und PRIMARY KEY Einschränkungen kann nicht dazu führen, dass die Anzahl der Indizes in der Tabelle 999 nicht gruppierte Indizes und 1 gruppierten Index überschreitet. Fremdschlüsseleinschränkungen generieren keinen Index automatisch. Sie verwenden jedoch häufig Fremdschlüsselspalten in Verknüpfungskriterien in Abfragen, indem Sie die Spalte oder Spalten in der Fremdschlüsseleinschränkung einer Tabelle mit der Primärschlüsselspalte oder eindeutigen Schlüsselspalte oder -spalten in der anderen Tabelle abgleichen. Ein Index für die Fremdschlüsselspalten ermöglicht es dem Datenbank-Engine, verwandte Daten in der Fremdschlüsseltabelle schnell zu finden.
In SQL Server 2022 (16.x) und höheren Versionen unterstützen reaktivierbare Vorgänge das Hinzufügen von Tabelleneinschränkungen für Primärschlüssel und eindeutige Schlüsseleinschränkungen. Weitere Informationen zum Aktivieren und Verwenden von fortsetzbaren ALTER TABLE ADD CONSTRAINT-Vorgängen finden Sie unter Fortsetzbares Hinzufügen von Tabellenconstraints.
Lager in Microsoft Fabric unterstützt ADD oder DROPPRIMARY KEY, UNIQUE und FOREIGN_KEY Spalteneinschränkungen, aber nur, wenn Sie die Option NOT ENFORCED angeben. Lager in Microsoft Fabric blockiert alle anderen ALTER TABLE Vorgänge.
Examples
Beispiele finden Sie unter ALTER TABLE (Transact-SQL).