Freigeben über


ALTER TABLE column_definition (Transact-SQL)

Gilt für:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceLager in Microsoft FabricSQL-Datenbank 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 )   
}  

Arguments

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 sie 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-Typ muss mit CREATE TYPE dieser 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.

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

max
Gilt nur für die Datentypen varchar, nvarchar und varbinary. Diese (max) Datentypen werden zum Speichern von 2^31 Byte Zeichen- und Binärdaten und 2^30 Bytes Unicode-Daten 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. Wenn dies nicht angegeben ist, CONTENT ist 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öhere Versionen

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 wird von der Anwendung bereitgestellt, wenn Daten eingefügt werden, oder durch eine DEFAULT-Einschränkung.

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 zur Verwendung der Spaltendefinition finden Sie unter FILESTREAM.

SORTIEREN 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 und SQL Server-Sortierungsname.

Die COLLATE Klausel kann verwendet werden, um nur die Sortierungen der Datentypen Char, varchar, nchar und nvarchar anzugeben.

Weitere Informationen zur COLLATE Klausel finden Sie unter COLLATE.

NULL | NICHT 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.

[ EINSCHRÄNKUNG constraint_name ]

Gibt den Anfang einer DEFAULT Wertdefinition an. Um die Kompatibilität mit früheren Versionen von SQL Server aufrechtzuerhalten, kann ein Einschränkungsname einem DEFAULT. constraint_name müssen den Regeln für Bezeichner entsprechen, mit der Ausnahme, dass der Name nicht mit einem Nummernzeichen (#) beginnen kann. Wenn constraint_name nicht angegeben ist, 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 Zeitstempelspalten 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
Ist ein Literalwert, eine NULLoder eine Systemfunktion, die als Standardspaltenwert verwendet wird. Wenn sie mit einer Spalte verwendet wird, die für einen benutzerdefinierten .NET Framework-Typ definiert ist, muss die Implementierung des Typs eine implizite Konvertierung von der constant_expression in den benutzerdefinierten Typ unterstützen.

MIT WERTEN

Wenn die Spalte NULLS zulässt, DEFAULT wird beim Hinzufügen einer Spalte und einer WITH VALUES Einschränkung der Wert der neuen Spalte auf den Für vorhandene Zeilen angegebenen DEFAULT constant_expression Wert festgelegt.

Wenn die hinzugefügte Spalte für vorhandene Zeilen keine NULLS zulässt, wird der Wert der Spalte immer auf den in DEFAULT constant expressionder Spalte angegebenen Wert festgelegt.

Ab SQL Server 2012 (11.x) kann dies ein Metadatenvorgang sein, der keine Null-Spalten hinzufügt,as-an-online-operation.

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

Gibt an, dass der angegebene DEFAULT constant_expression 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. Wenn WITH VALUES für Spalten, die Nullwerte zulassen, nicht angegeben ist, 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 häufig mit PRIMARY KEY Einschränkungen verwendet, um als eindeutiger Zeilenbezeichner für die Tabelle zu dienen. Die IDENTITY Eigenschaft kann einer tinyint-, smallint-, int-, bigint-, decimal(p,0)- oder numeric(p,0)-Spalte zugewiesen werden. Es kann nur eine Identitätsspalte pro Tabelle erstellt werden. Das Schlüsselwort und die DEFAULT gebundenen Standardwerte können nicht mit einer Identitätsspalte verwendet werden. Entweder müssen sowohl Ausgangswert als auch Inkrement oder keines von beiden angegeben werden. Wenn keines angegeben ist, lautet (1,1)der Standardwert .

Note

Sie können eine vorhandene Tabellenspalte nicht ändern, um 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 IDENTITY, um die Eigenschaft einer Spalte zu deaktivieren, indem Sie zulassen, dass Werte explizit eingefügt werden.

Samen Der Wert, der für die erste Zeile verwendet wird, die in die Tabelle geladen wurde.

Zunahme Der inkrementelle Wert, der dem Identitätswert der vorherigen Zeile hinzugefügt wird, die geladen wird.

NICHT FÜR REPLIKATION

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

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

ROWGUIDCOL

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

Gibt an, dass die Spalte eine Spalte mit für alle Zeilen global eindeutigen Bezeichnern ist. ROWGUIDCOL kann nur einer Eindeutigidentifiziererspalte zugewiesen werden, und nur eine Eindeutigidentifiziererspalte pro Tabelle kann als ROWGUIDCOL Spalte festgelegt werden. ROWGUIDCOL Spalten mit benutzerdefinierten Datentypen können nicht zugewiesen werden.

ROWGUIDCOL erzwingt die Eindeutigkeit der in der Spalte gespeicherten Werte nicht. Generiert auch nicht automatisch Werte für neue Zeilen, ROWGUIDCOL die in die Tabelle eingefügt werden. Um eindeutige Werte für jede Spalte zu generieren, verwenden Sie entweder die NEWID() Funktion für INSERT Anweisungen, oder geben Sie die NEWID() Funktion als Standard für die Spalte an. 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).

VERSCHLÜSSELT MIT

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 = { DETERMINISTISCH | RANDOMISIERT }

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

FÜGEN SIE MASKIERT MIT (FUNKTION = ' mask_function ') hinzu.

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.

Remarks

Wenn eine Spalte mit einem eindeutigen Datentyp hinzugefügt wird, 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. Weitere Informationen finden Sie unter NEWID (Transact-SQL).

Das Datenbankmodul erzwingt keine Reihenfolge zum Angeben DEFAULTvon , IDENTITY, , ROWGUIDCOLoder Spalteneinschränkungen in einer Spaltendefinition.

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

Examples

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