Freigeben über


ALTER TABLE column_definition (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Warehouse in Microsoft Fabric

Gibt die Eigenschaften einer Spalte an, die mithilfe von ALTER TABLE einer Tabelle hinzugefügt wird.

Transact-SQL-Syntaxkonventionen

Syntax

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]  
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  
  
<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   
  
<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { 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

column_name
Der Name der Spalte, die geändert, hinzugefügt oder gelöscht werden soll. column_name kann zwischen 1 und 128 Zeichen aufweisen. Bei neuen Spalten, die mit einem Timestamp-Datentyp erstellt wurden, können column_name weggelassen werden. Wenn column_name nicht für eine Spalte vom Datentyp timestamp angegeben ist, wird der Name timestamp verwendet.

[ type_schema_name. ] type_name
Der Datentyp für die hinzugefügte Spalte und das Schema, zu dem er gehört.

type_name kann Folgendes sein:

  • Ein Microsoft SQL Server-Systemdatentyp.

  • Ein Aliasdatentyp, der auf einem SQL Server-Systemdatentyp basiert. Alias-Datentypen müssen mithilfe CREATE TYPE der Verwendung erstellt werden, bevor sie in einer Tabellendefinition verwendet werden können.

  • Ein benutzerdefinierter Microsoft .NET Framework-Datentyp und das Schema, zu dem er gehört. Ein benutzerdefinierter .NET Framework-Datentyp muss mithilfe von CREATE TYPE erstellt werden, bevor er in einer Tabellendefinition verwendet werden kann.

Wenn type_schema_name nicht angegeben ist, verweist die Microsoft-Datenbank-Engine in der folgenden Reihenfolge auf type_name:

  • SQL Server-Systemdatentyp.

  • Das Standardschema des aktuellen Benutzers in der aktuellen Datenbank

  • Das dbo -Schema in der aktuellen Datenbank

precision
Die Genauigkeit für den angegebenen Datentyp. Weitere Informationen über gültige Genauigkeitswerte finden Sie unter Genauigkeit, Dezimalstellen und Länge (Transact-SQL).

scale
Die Dezimalstellen für den angegebenen Datentyp. Weitere Informationen zu gültigen Dezimalstellenwerten finden Sie unter Genauigkeit, Dezimalstellen und Länge (Transact-SQL).

max
Gilt nur für die Datentypen varchar, nvarchar und varbinary. Diese Datentypen werden zum Speichern von Zeichen- und Binärdaten mit einer Länge von 2^31 Byte und Unicode-Daten mit einer Länge von 2^30 Byte verwendet.

CONTENT
Gibt an, dass jede Instanz des xml-Datentyps in column_name mehrere allgemeine Elemente enthalten kann. CONTENT gilt nur für den xml-Datentyp und kann nur angegeben werden, wenn xml_schema_collection ebenfalls angegeben ist. Fehlt die Angabe, ist CONTENT das Standardverhalten.

DOCUMENT
Gibt an, dass jede Instanz des xml-Datentyps in column_name nur ein allgemeines Element enthalten kann. DOCUMENT gilt nur für den xml-Datentyp und kann nur angegeben werden, wenn xml_schema_collection ebenfalls angegeben ist.

xml_schema_collection
Gilt für: SQL Server 2008 (10.0.x) und höher.

Gilt nur für den xml-Datentyp zum Verknüpfen einer XML-Schemaauflistung mit diesem Typ. Bevor eine XML-Datentypspalte einem Schema hinzugefügt wird, muss das Schema zuerst mithilfe der CREATE XML SCHEMA COLLECTION in der Datenbank erstellt werden.

FILESTREAM
Gibt optional das FILESTREAM-Speicherattribut für eine Spalte an, die einen type_name mit dem Wert varbinary(max) hat.

Wenn FILESTREAM für eine Spalte angegeben wird, muss die Tabelle auch eine Spalte mit dem Datentyp uniqueidentifier aufweisen, der das ROWGUIDCOL-Attribut enthält. Diese Spalte darf keine NULL-Werte zulassen und muss eine UNIQUE- oder eine PRIMARY KEY-Einschränkung für einzelne Spalten enthalten. Der GUID-Wert für die Spalte muss entweder von einer Anwendung bereitgestellt werden, wenn Daten eingefügt werden, oder durch eine DEFAULT-Einschränkung, die die NEWID() Funktion verwendet.

Die Spalte ROWGUIDCOL kann nicht gelöscht, und die zugehörigen Einschränkungen können nicht geändert werden, wenn für die Tabelle eine FILESTREAM-Spalte definiert ist. Die Spalte ROWGUIDCOL kann nur gelöscht werden, nachdem die letzte FILESTREAM-Spalte gelöscht wurde.

Wenn das FILESTREAM-Speicherattribut für eine Spalte angegeben wird, werden alle Werte dieser Spalte in einem FILESTREAM-Datencontainer des Dateisystems gespeichert.

Ein Beispiel, das die Verwendung von Spaltendefinitionen veranschaulicht, finden Sie unter FILESTREAM (SQL Server).

COLLATE collation_name
Gibt die Sortierung der Spalte an. Wenn keine Sortierung angegeben ist, wird der Spalte die Standardsortierung der Datenbank zugewiesen. Als Sortierungsname kann entweder der Name einer Windows-Sortierreihenfolge oder ein SQL-Sortierungsname verwendet werden. Eine Liste und weitere Informationen finden Sie unter Name der Windows-Sortierung (Transact-SQL) und SQL Server-Sortierungsname (Transact-SQL).

Mit der COLLATE-Klausel können Sie nur die Sortierungen von Spalten der Datentypen char, varchar, nchar und nvarchar angeben.

Weitere Informationen zur COLLATE-Klausel finden Sie unter COLLATE (Transact-SQL).

NULL | NOT NULL
Bestimmt, ob NULL Werte in der Spalte zulässig sind. NULL ist nicht unbedingt eine Einschränkung, sondern kann genau wie NOT NULLangegeben werden.

[ CONSTRAINT constraint_name ]
Gibt den Anfang einer DEFAULT-Wertdefinition an. Um die Kompatibilität mit früheren Versionen von SQL Server aufrechtzuerhalten, ist es möglich, einer DEFAULT-Definition einen Einschränkungsnamen zuzuweisen. constraint_name müssen den Regeln für Bezeichner entsprechen, mit der Ausnahme, dass der Name nicht mit einem Nummernzeichen (#) beginnen kann. Wenn contraint_name nicht angegeben wird, wird der DEFAULT-Definition ein vom System generierter Name zugewiesen.

DEFAULT
Ein Schlüsselwort, das den Standardwert für die Spalte angibt. DEFAULT-Definitionen können verwendet werden, um Werte für eine neue Spalte in den vorhandenen Datenzeilen bereitzustellen. DEFAULT-Definitionen können nicht auf timestamp-Spalten oder Spalten mit einer IDENTITY-Eigenschaft angewendet werden. Wenn ein Standardwert für einen benutzerdefinierten Spaltentyp angegeben wird, muss dieser Typ eine implizite Konvertierung von constant_expression in den benutzerdefinierten Typ unterstützen.

constant_expression
Ein Literalwert, ein NULL-Wert oder eine Systemfunktion, der bzw. die als Standardwert für die Spalte verwendet wird. Wenn die Implementierung des Datentyps zusammen mit einer Spalte verwendet wird, die als benutzerdefinierter Datentyp von .NET Framework definiert ist, muss sie eine implizite Konvertierung von constant_expression in den benutzerdefinierten Datentyp unterstützen.

WITH VALUES Beim Hinzufügen einer Spalte UND einer DEFAULT-Beschränkung wird, wenn die Spalte NULL-Werte mit WITH VALUES erlaubt, für bestehende Zeilen der Wert der neuen Spalte auf den in DEFAULT constant_expression angegebenen Wert gesetzt.

Wenn die hinzugefügte Spalte NULL-Werte nicht zulässt, wird der Wert der Spalte immer auf den im DEFAULT constant expression angegebenen Wert gesetzt. Ab SQL Server 2012 kann dies ein Metadatenvorgang sein, bei dem "nicht-null-columns-as-an-online-operation" hinzugefügt wird.

Wenn dieser verwendet wird, hat dies keine Auswirkung wenn die verknüpfte Spalte ist nicht ebenfalls hinzugefügt wird.

Gibt an, dass der in DEFAULT constant_expression angegebene Wert in einer neuen Spalte gespeichert wird, die vorhandenen Zeilen hinzugefügt wird. Wenn die hinzugefügte Spalte NULL-Werte zulässt und WITH VALUES angegeben ist, wird der Standardwert in der neuen, zu vorhandenen Zeilen hinzugefügten Spalte gespeichert. Ist WITH VALUES für Spalten, die NULL-Werte zulassen, nicht angegeben, wird der Wert NULL in der neuen Spalte in vorhandenen Zeilen gespeichert. Wenn die neue Spalte keine NULL-Werte zulässt, wird der Standardwert in neuen Zeilen gespeichert, unabhängig davon, ob WITH VALUES angegeben ist.

IDENTITY
Gibt an, dass es sich bei der neuen Spalte um eine Identitätsspalte handelt. Von der SQL Server-Datenbank-Engine wird ein eindeutiger, inkrementeller Wert für die Spalte bereitgestellt. Wenn Sie vorhandenen Tabellen Bezeichnerspalten hinzufügen, werden die ID-Nummern mit den Ausgangswerten und den inkrementellen Werten den vorhandenen Zeilen der Tabelle hinzugefügt. Die Reihenfolge, in der die Zeilen aktualisiert werden, ist nicht sichergestellt. Auch für alle neu hinzugefügten Zeilen werden ID-Nummern generiert.

Identitätsspalten werden in der Regel in Verbindung mit PRIMARY KEY-Einschränkungen verwendet, um als eindeutiger Zeilenbezeichner für die Tabelle zu dienen. Die IDENTITY-Eigenschaft kann folgenden Spalten zugewiesen werden: tinyint, smallint, int, bigint, decimal(p,0) oder numeric(p,0) . Es kann nur eine Identitätsspalte pro Tabelle erstellt werden. Das DEFAULT-Schlüsselwort und gebundene Standardwerte können bei einer Identitätsspalte nicht verwendet werden. Entweder müssen sowohl Ausgangswert als auch Inkrement oder keines von beiden angegeben werden. Wenn keine Angabe gemacht wird, ist der Standardwert (1,1).

Hinweis

Es ist nicht möglich, einer vorhandenen Tabellenspalte die IDENTITY-Eigenschaft hinzuzufügen.

Das Hinzufügen einer Identitätsspalte zu einer veröffentlichten Spalte wird nicht unterstützt, da dies beim Replizieren der Spalte auf den Abonnenten zu einer Nichtkonvergenz führen kann. Die Werte in der Identitätsspalte auf dem Verleger richten sich nach der Ordnung, in der die Zeilen für die betreffende Tabelle physisch gespeichert sind. Die Zeilen können beim Abonnenten unterschiedlich gespeichert werden; Daher kann der Wert für die Identitätsspalte für dieselben Zeilen unterschiedlich sein.

Verwenden Sie SET IDENTITY_INSERT, um die IDENTITY-Eigenschaft einer Spalte zu deaktivieren, indem das Einfügen expliziter Werte ermöglicht wird.

seed
Der Wert, der für die erste in die Tabelle geladene Zeile verwendet wird.

increment
Der Inkrementwert, der zum Identitätswert der zuvor geladenen Zeile addiert wird.

NOT FOR REPLICATION
Gilt für: SQL Server 2008 (10.0.x) und höher.

Kann für die IDENTITY-Eigenschaft angegeben werden. Wenn diese Klausel für die IDENTITY-Eigenschaft angegeben wird, werden Werte in Identitätsspalten nicht inkrementiert, wenn Replikations-Agents Einfügevorgänge ausführen.

ROWGUIDCOL
Gilt für: SQL Server 2008 (10.0.x) und höher.

Gibt an, dass die Spalte eine Spalte mit für alle Zeilen global eindeutigen Bezeichnern ist. ROWGUIDCOL kann nur einer uniqueidentifier-Spalte zugewiesen werden, und nur eine uniqueidentifier-Spalte pro Tabelle kann als ROWGUIDCOL-Spalte gekennzeichnet werden. ROWGUIDCOL kann keinen Spalten des benutzerdefinierten Datentyps zugewiesen werden.

ROWGUIDCOL erzwingt keine Eindeutigkeit der in der Spalte gespeicherten Werte. ROWGUIDCOL generiert auch nicht automatisch Werte für neue Zeilen, die in die Tabelle eingefügt werden. Verwenden Sie entweder die NEWID-Funktion in INSERT-Anweisungen, oder geben Sie die NEWID-Funktion als Standard für die Spalte an, um eindeutige Werte für jede Spalte zu generieren. Weitere Informationen finden Sie unter NEWID (Transact-SQL) und INSERT (Transact-SQL).

SPARSE
Gibt an, dass die Spalte eine Sparsespalte ist. Der Speicher für Sparsespalten ist für NULL-Werte optimiert. Spalten mit geringer Dichte können nicht als NOT NULL festgelegt werden. Weitere Einschränkungen und Informationen zu Sparsespalten finden Sie unter Verwenden von Sparsespalten.

<column_constraint>
Die Definitionen der Spalteneinschränkungsargumente finden Sie unter column_constraint (Transact-SQL).

ENCRYPTED WITH
Gibt Verschlüsselungsspalten mit dem Feature Always Encrypted an. ENCRYPTED WITH wird in der SQL-Datenbank in Microsoft Fabric nicht unterstützt.

COLUMN_ENCRYPTION_KEY = key_name
Gibt Spaltenverschlüsselungsschlüssel an. Weitere Informationen finden Sie unter CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Diedeterministische Verschlüsselung verwendet eine Methode, die immer denselben verschlüsselten Wert für jeden angegebenen Klartextwert generiert. Die Verwendung der deterministischen Verschlüsselung ermöglicht die Suche mit einer Gleichheitsüberprüfung, das Gruppieren und das Verknüpfen von Tabellen mit Gleichheitsjoins, basierend auf verschlüsselten Werten. Jedoch erlaubt sie nicht autorisierten Benutzern möglicherweise, Informationen zu verschlüsselten Werten zu erraten, indem sie die Muster in den verschlüsselten Spalten untersuchen. Das Verknüpfen zweier Tabellen mit deterministisch verschlüsselten Spalten ist nur möglich, wenn die Spalten mit demselben Spaltenverschlüsselungsschlüssel verschlüsselt sind. Die deterministische Verschlüsselung muss eine Spaltensortierung mit einer binary2-Sortierreihenfolge für Zeichenspalten verwenden.

Diezufällige Verschlüsselung verwendet eine Methode, die Daten in einer weniger vorhersagbaren Weise verschlüsselt. Die Verschlüsselung nach dem Zufallsprinzip ist zwar sicherer, verhindert jedoch jegliche Berechnungen und Indizierungen in verschlüsselten Spalten, es sei denn, Ihre SQL Server-Instanz unterstützt Always Encrypted mit Secure Enclaves.

Wenn Sie Always Encrypted (ohne Secure Enclaves) verwenden, verwenden Sie die deterministische Verschlüsselung für Spalten, die mit Parametern oder Gruppierungsparametern durchsucht werden sollen (z.B. eine Behörden-ID-Nummer). Verwenden Sie die zufällige Verschlüsselung für Daten wie eine Kreditkartennummer, die nicht mit anderen Datensätzen gruppiert ist oder zum Verknüpfen von Tabellen verwendet wird und die nicht durchsucht werden, da Sie andere Spalten (z. B. eine Transaktionsnummer) verwenden, um die Zeile zu finden, die die verschlüsselte Spalte von Interesse enthält.

Wenn Sie Always Encrypted mit Secure Enclaves verwenden, wird eine Verschlüsselung nach dem Zufallsprinzip empfohlen.

Spalten müssen einen qualifizierenden Datentyp aufweisen.

ALGORITHM
Gilt für: SQL Server 2016 (13.x) und höher, SQL-Datenbank.
Muss 'AEAD_AES_256_CBC_HMAC_SHA_256' sein.

Weitere Informationen einschließlich Featureeinschränkungen finden Sie unter Always Encrypted (Datenbank-Engine).

ADD MASKED WITH (FUNCTION = ' mask_function ')
Gilt für: SQL Server 2016 (13.x) und höher, SQL-Datenbank.

Gibt eine dynamische Datenmaske an. mask_function ist der Name der Maskierungsfunktion mit den entsprechenden Parametern. Die folgenden Funktionen stehen zur Verfügung:

  • default()
  • email()
  • partial()
  • random()

Weitere Informationen zu Funktionsparametern finden Sie im Artikel zur dynamischen Datenmaskierung.

Bemerkungen

Wenn eine Spalte hinzugefügt wird, die über einen uniqueidentifier-Datentyp verfügt, kann sie mit einem Standardwert definiert werden, der die NEWID()-Funktion verwendet, um die eindeutigen Bezeichnerwerte in der neuen Spalte für jede vorhandene Zeile in der Tabelle anzugeben.

Die Datenbank-Engine erzwingt keine Reihenfolge für die Angabe von DEFAULT, IDENTITY, ROWGUIDCOL oder Spalteneinschränkungen in einer Spaltendefinition.

ALTER TABLE-Anweisung schlägt fehl, wenn das Hinzufügen der Spalte bewirkt, dass die Datenzeilengröße 8.060 Bytes überschreitet.

Beispiele

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