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

DIESES THEMA GILT FÜR: jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Ändert eine Tabellendefinition durch Ändern, Hinzufügen oder Löschen von Spalten und Einschränkungen, Neuzuweisen und Neuerstellen von Partitionen oder Deaktivieren bzw. Aktivieren von Einschränkungen und Triggern.Modifies a table definition by altering, adding, or dropping columns and constraints, reassigning and rebuilding partitions, or disabling or enabling constraints and triggers.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database  

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name   
{   
    ALTER COLUMN column_name   
    {   
        [ type_schema_name. ] type_name   
            [ (   
                {   
                   precision [ , scale ]   
                 | max   
                 | xml_schema_collection   
                }   
            ) ]   
        [ COLLATE collation_name ]   
        [ NULL | NOT NULL ] [ SPARSE ]  
      | { ADD | DROP }   
          { ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE | HIDDEN }  
      | { ADD | DROP } MASKED [ WITH ( FUNCTION = ' mask_function ') ]  
    }   
    [ WITH ( ONLINE = ON | OFF ) ]  
    | [ WITH { CHECK | NOCHECK } ]  

    | ADD   
    {   
        <column_definition>  
      | <computed_column_definition>  
      | <table_constraint>   
      | <column_set_definition>   
    } [ ,...n ]  
      | [ system_start_time_column_name datetime2 GENERATED ALWAYS AS ROW START   
                   [ HIDDEN ] [ NOT NULL ] [ CONSTRAINT constraint_name ] 
           DEFAULT constant_expression [WITH VALUES] ,  
            system_end_time_column_name datetime2 GENERATED ALWAYS AS ROW END   
                   [ HIDDEN ] [ NOT NULL ]  [ CONSTRAINT constraint_name ] 
           DEFAULT constant_expression [WITH VALUES] ,  
         ]  
       PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )  
    | DROP   
     [ {  
         [ CONSTRAINT ]  [ IF EXISTS ]  
         {   
              constraint_name   
              [ WITH   
               ( <drop_clustered_constraint_option> [ ,...n ] )   
              ]   
          } [ ,...n ]  
          | COLUMN  [ IF EXISTS ]  
          {  
              column_name   
          } [ ,...n ]  
          | PERIOD FOR SYSTEM_TIME  
     } [ ,...n ]  
    | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT   
        { ALL | constraint_name [ ,...n ] }   

    | { ENABLE | DISABLE } TRIGGER   
        { ALL | trigger_name [ ,...n ] }  

    | { ENABLE | DISABLE } CHANGE_TRACKING   
        [ WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } ) ]  

    | SWITCH [ PARTITION source_partition_number_expression ]  
        TO target_table   
        [ PARTITION target_partition_number_expression ]  
        [ WITH ( <low_lock_priority_wait> ) ]  
    | SET   
        (  
            [ FILESTREAM_ON =   
                { partition_scheme_name | filegroup | "default" | "NULL" } ]  
            | SYSTEM_VERSIONING =   
                  {   
                      OFF   
                  | ON   
                      [ ( HISTORY_TABLE = schema_name . history_table_name   
                          [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] 
                          [, HISTORY_RETENTION_PERIOD = 
                          { 
                               INFINITE | number {DAY | DAYS | WEEK | WEEKS 
                 | MONTH | MONTHS | YEAR | YEARS } 
                          } 
                          ]  
                        )  
                      ]  
                  }  
          )  
    | REBUILD   
      [ [PARTITION = ALL]  
        [ WITH ( <rebuild_option> [ ,...n ] ) ]   
      | [ PARTITION = partition_number   
           [ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]  
        ]  
      ]  

    | <table_option>  

    | <filetable_option>  

    | <stretch_configuration>  

}  
[ ; ]  

-- ALTER TABLE options  

<column_set_definition> ::=   
    column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS  

<drop_clustered_constraint_option> ::=    
    {   
        MAXDOP = max_degree_of_parallelism  
      | ONLINE = { ON | OFF }  
      | MOVE TO   
         { partition_scheme_name ( column_name ) | filegroup | "default" }  
    }  
<table_option> ::=  
    {  
        SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )  
    }  

<filetable_option> ::=  
    {  
       [ { ENABLE | DISABLE } FILETABLE_NAMESPACE ]  
       [ SET ( FILETABLE_DIRECTORY = directory_name ) ]  
    }  

<stretch_configuration> ::=  
    {  
      SET (  
        REMOTE_DATA_ARCHIVE   
        {  
            = ON (  <table_stretch_options>  )  
          | = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED )  
          | ( <table_stretch_options> [, ...n] )  
        }  
            )  
    }  

<table_stretch_options> ::=  
    {  
     [ FILTER_PREDICATE = { null | table_predicate_function } , ]  
       MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }  
    }  

<single_partition_rebuild__option> ::=  
{  
      SORT_IN_TEMPDB = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }  
    | ONLINE = { ON [( <low_priority_lock_wait> ) ] | OFF }  
}  

<low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ], 
        ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )   
}  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

ALTER TABLE [ database_name . [schema_name ] . | schema_name. ] source_table_name   
{  
    ALTER COLUMN column_name  
        {   
            type_name [ ( precision [ , scale ] ) ]   
            [ COLLATE Windows_collation_name ]   
            [ NULL | NOT NULL ]   
        }  
    | ADD { <column_definition> | <column_constraint> FOR column_name} [ ,...n ]  
    | DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]  
    | REBUILD {  
            [ PARTITION = ALL [ WITH ( <rebuild_option> ) ] ] 
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_option> ] ]
      } 
    | { SPLIT | MERGE } RANGE (boundary_value)  
    | SWITCH [ PARTITION source_partition_number  
        TO target_table_name [ PARTITION target_partition_number ]  
}  
[;]  

<column_definition>::=  
{  
    column_name  
    type_name [ ( precision [ , scale ] ) ]   
    [ <column_constraint> ]  
    [ COLLATE Windows_collation_name ]  
    [ NULL | NOT NULL ]  
}  

<column_constraint>::=  
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression  

<rebuild_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]   
}

<single_partition_rebuild_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
}  

ArgumenteArguments

database_namedatabase_name
Name der Datenbank, in der die Tabelle erstellt wurde.Is the name of the database in which the table was created.

schema_nameschema_name
Der Name des Schemas, zu dem die Tabelle gehört.Is the name of the schema to which the table belongs.

table_nametable_name
Der Name der Tabelle, die geändert werden soll.Is the name of the table to be altered. Wenn die Tabelle nicht in der aktuellen Datenbank oder nicht in dem Schema enthalten ist, das dem aktuellen Benutzer gehört, müssen die Datenbank und das Schema explizit angegeben werden.If the table is not in the current database or is not contained by the schema owned by the current user, the database and schema must be explicitly specified.

ALTER COLUMNALTER COLUMN
Gibt an, dass die benannte Spalte geändert werden soll.Specifies that the named column is to be changed or altered.

Für die geänderte Spalte gilt Folgendes:The modified column cannot be any one of the following:

  • Eine Spalte mit einem Zeitstempel -Datentyp.A column with a timestamp data type.

  • Die Spalte darf nicht die ROWGUIDCOL-Spalte der Tabelle sein.The ROWGUIDCOL for the table.

  • Die Spalte darf keine berechnete Spalte sein und nicht in einer berechneten Spalte verwendet werden.A computed column or used in a computed column.

  • Verwendet in Statistiken, die von der CREATE STATISTICS-Anweisung generiert werden, es sei denn, die Spalte ist eine Varchar, Nvarchar, oder Varbinary -Datentyp, der Datentyp wird nicht geändert, und die neue Größe ist gleich oder größer als die alte Größe, oder wenn die Spalte von not Null in Null geändert wird.Used in statistics generated by the CREATE STATISTICS statement unless the column is a varchar, nvarchar, or varbinary data type, the data type is not changed, and the new size is equal to or greater than the old size, or if the column is changed from not null to null. Entfernen Sie die Statistiken zunächst mithilfe der DROP STATISTICS-Anweisung.First, remove the statistics using the DROP STATISTICS statement. Vom Abfrageoptimierer automatisch generierte Statistiken werden von ALTER COLUMN automatisch gelöscht.Statistics that are automatically generated by the query optimizer are automatically dropped by ALTER COLUMN.

  • Die Spalte darf nicht in einer PRIMARY KEY- oder [FOREIGN KEY] REFERENCES-Einschränkung verwendet werden.Used in a PRIMARY KEY or [FOREIGN KEY] REFERENCES constraint.

  • Die Spalte darf nicht in einer CHECK- oder UNIQUE-Einschränkung verwendet werden.Used in a CHECK or UNIQUE constraint. Das Ändern der Länge einer Spalte mit variabler Länge, die in einer CHECK- oder UNIQUE-Einschränkung verwendet wird, ist dagegen zulässig.However, changing the length of a variable-length column used in a CHECK or UNIQUE constraint is allowed.

  • Der Spalte darf keine Standarddefinition zugeordnet sein.Associated with a default definition. Die Länge, die Genauigkeit oder die Dezimalstellen einer Spalte können jedoch geändert werden, sofern der Datentyp nicht geändert wird.However, the length, precision, or scale of a column can be changed if the data type is not changed.

Der Datentyp des Text, Ntext und Image Spalten können nur auf folgende Weise geändert werden:The data type of text, ntext and image columns can be changed only in the following ways:

-   <span data-ttu-id="4de8f-129">**Text** auf **varchar(max)**, **nvarchar(max)**, oder **Xml**</span><span class="sxs-lookup"><span data-stu-id="4de8f-129">**text** to **varchar(max)**, **nvarchar(max)**, or **xml**</span></span>  

-   <span data-ttu-id="4de8f-130">**Ntext** auf **varchar(max)**, **nvarchar(max)**, oder **Xml**</span><span class="sxs-lookup"><span data-stu-id="4de8f-130">**ntext** to **varchar(max)**, **nvarchar(max)**, or **xml**</span></span>  

-   <span data-ttu-id="4de8f-131">**Bild** auf **varbinary(max)**</span><span class="sxs-lookup"><span data-stu-id="4de8f-131">**image** to **varbinary(max)**</span></span>  

Änderungen des Datentyps können Datenänderungen zur Folge haben.Some data type changes may cause a change in the data. Ändern Sie z. B. ein Nchar oder Nvarchar Spalte Char oder Varchar kann dazu führen, dass die Konvertierung erweiterter Zeichen.For example, changing an nchar or nvarchar column to char or varchar may cause the conversion of extended characters. Weitere Informationen finden Sie unter CAST und CONVERT (Transact-SQL).For more information, see CAST and CONVERT (Transact-SQL). Das Reduzieren der Genauigkeit und der Dezimalstellen einer Spalte kann zum Abschneiden von Daten führen.Reducing the precision or scale of a column may cause data truncation.

 The data type of a column of a partitioned table cannot be changed.  

Der Datentyp der Spalten in einem Index kann nicht geändert werden, es sei denn, die Spalte ist eine Varchar, Nvarchar, oder Varbinary -Datentyp, und die neue Größe ist größer oder gleich als die alte Größe.The data type of columns included in an index cannot be changed unless the column is a varchar, nvarchar, or varbinary data type, and the new size is equal to or larger than the old size.

Eine in einer primary Key-Einschränkung enthaltenen Spalten kann nicht geändert werden, von NOT NULL auf NULL.A columns included in a primary key constraint, cannot be changed from NOT NULL to NULL.

Wenn die Spalte geändert wird mit VERSCHLÜSSELT verschlüsselt ist, können Sie den Datentyp in einen kompatiblen Datentyp (z. B. INT, BIGINT) ändern, jedoch Einstellungen für die Verschlüsselung kann nicht geändert werden.If the column being modified is encrypted using ENCRYPTED WITH, you can change the datatype to a compatible datatype (such as INT to BIGINT) but you cannot change any encryption settings.

column_namecolumn_name
Der Name der Spalte, die geändert, hinzugefügt oder gelöscht werden soll.Is the name of the column to be altered, added, or dropped. Column_name kann maximal 128 Zeichen sein.column_name can be a maximum of 128 characters. Bei neuen Spalten Column_name kann ausgelassen werden, für Spalten erstellt, die mit einem Zeitstempel -Datentyp.For new columns, column_name can be omitted for columns created with a timestamp data type. Der Name Zeitstempel wird verwendet, wenn keine Column_name für angegeben wird eine Zeitstempel -Datentypspalte.The name timestamp is used if no column_name is specified for a timestamp data type column.

[ Type_schema_name.[ type_schema_name. ] Type_name] type_name
Der neue Datentyp für die geänderte Spalte oder der Datentyp für die hinzugefügte Spalte.Is the new data type for the altered column, or the data type for the added column. TYPE_NAME kann nicht für vorhandene Spalten von partitionierten Tabellen angegeben werden.type_name cannot be specified for existing columns of partitioned tables. TYPE_NAME kann eine der folgenden sein:type_name can be any one of the following:

  • Ein SQL ServerSQL Server-Systemdatentyp.A SQL ServerSQL Server system data type.

  • Ein Aliasdatentyp, der auf einem SQL ServerSQL Server-Systemdatentyp basiert.An alias data type based on a SQL ServerSQL Server system data type. Aliasdatentypen werden mit der CREATE TYPE-Anweisung erstellt, bevor sie in einer Tabellendefinition verwendet werden können.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition.

  • Ein benutzerdefinierter .NET Framework.NET Framework-Datentyp und das Schema, zu dem er gehört.A .NET Framework.NET Framework user-defined type, and the schema to which it belongs. Benutzerdefinierte .NET Framework.NET Framework-Typen werden mit der CREATE TYPE-Anweisung erstellt, bevor sie in einer Tabellendefinition verwendet werden können. .NET Framework.NET Framework user-defined types are created with the CREATE TYPE statement before they can be used in a table definition.

Im folgenden sind die Kriterien für Type_name einer geänderten Spalte:The following are criteria for type_name of an altered column:

  • Der vorherige Datentyp muss implizit in den neuen Datentyp konvertiert werden können.The previous data type must be implicitly convertible to the new data type.

  • TYPE_NAME nicht Zeitstempel.type_name cannot be timestamp.

  • ANSI NULL DEFAULT ist für ALTER COLUMN immer aktiviert. Fehlt die Angabe, so lässt die Spalte NULL-Werte zu.ANSI_NULL defaults are always on for ALTER COLUMN; if not specified, the column is nullable.

  • ANSI_PADDING ist für ALTER COLUMN immer auf ON festgelegt.ANSI_PADDING padding is always ON for ALTER COLUMN.

  • Wenn die geänderte Spalte eine Identitätsspalte ist New_data_type muss ein Datentyp, der die Identity-Eigenschaft unterstützt werden.If the modified column is an identity column, new_data_type must be a data type that supports the identity property.

  • Die aktuelle Einstellung für SET ARITHABORT wird ignoriert.The current setting for SET ARITHABORT is ignored. ALTER TABLE wird ausgeführt, als sei ARITHABORT aktiviert.ALTER TABLE operates as if ARITHABORT is set to ON.

Hinweis

Falls die COLLATE-Klausel nicht angegeben wird, bewirkt das Ändern des Datentyps einer Spalte die Änderung der Sortierung in die Standardsortierung der Datenbank.If the COLLATE clause is not specified, changing the data type of a column will cause a collation change to the default collation of the database.

precisionprecision
Die Genauigkeit für den angegebenen Datentyp.Is the precision for the specified data type. Weitere Informationen über gültige Genauigkeitswerte finden Sie unter mit einfacher Genauigkeit, Dezimalstellen und Länge ( Transact-SQL ) .For more information about valid precision values, see Precision, Scale, and Length (Transact-SQL).

scalescale
Die Dezimalstellen für den angegebenen Datentyp.Is the scale for the specified data type. Weitere Informationen zu gültigen Dezimalstellenwerten finden Sie unter mit einfacher Genauigkeit, Dezimalstellen und Länge ( Transact-SQL ) .For more information about valid scale values, see Precision, Scale, and Length (Transact-SQL).

Maxmax
Gilt nur für die Varchar, Nvarchar, und Varbinary -Datentyp zum Speichern von 2 ^ 31-1 Bytes von Zeichen-, binär-, und der Unicode-Daten.Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31-1 bytes of character, binary data, and of Unicode data.

xml_schema_collectionxml_schema_collection
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gilt nur für die Xml Datentyp für den Typ ein XML-Schemas zuordnen.Applies only to the xml data type for associating an XML schema with the type. Vor der Eingabe einer Xml Spalte einer schemaauflistung, die schemaauflistung muss zuerst erstellt werden in der Datenbank mithilfe von CREATE XML SCHEMA COLLECTION.Before typing an xml column to a schema collection, the schema collection must first be created in the database by using CREATE XML SCHEMA COLLECTION.

COLLATE < Collation_name > Gibt die neue Sortierung für die geänderte Spalte.COLLATE < collation_name > Specifies the new collation for the altered column. Wenn keine Sortierung angegeben ist, wird der Spalte die Standardsortierung der Datenbank zugewiesen.If not specified, the column is assigned the default collation of the database. Als Sortierungsname kann entweder der Name einer Windows-Sortierreihenfolge oder ein SQL-Sortierungsname verwendet werden.Collation name can be either a Windows collation name or a SQL collation name. Eine Liste und Weitere Informationen finden Sie unter Windows-Sortierungsname ( Transact-SQL ) und SQL Server-Sortierungsname ( Transact-SQL ) .For a list and more information, see Windows Collation Name (Transact-SQL) and SQL Server Collation Name (Transact-SQL).

Die COLLATE-Klausel kann verwendet werden, so ändern Sie nur die Sortierungen von Spalten von der Char, Varchar, Nchar, und Nvarchar Datentypen.The COLLATE clause can be used to change the collations only of columns of the char, varchar, nchar, and nvarchar data types. Wenn Sie die Sortierung einer Spalte eines benutzerdefinierten Aliasdatentyps ändern möchten, müssen Sie zunächst mit separaten ALTER TABLE-Anweisungen die Spalte in einen SQL ServerSQL Server-Systemdatentyp ändern und ihre Sortierung ändern. Anschließend können Sie die Spalte zurück in einen Aliasdatentyp ändern.To change the collation of a user-defined alias data type column, you must execute separate ALTER TABLE statements to change the column to a SQL ServerSQL Server system data type and change its collation, and then change the column back to an alias data type.

Mit ALTER COLUMN kann die Sortierung nicht geändert werden, wenn eine der folgenden Bedingungen zutrifft:ALTER COLUMN cannot have a collation change if one or more of the following conditions exist:

  • Wenn eine CHECK-Einschränkung, eine FOREIGN KEY-Einschränkung oder berechnete Spalten auf die geänderte Spalte verweisen.If a CHECK constraint, FOREIGN KEY constraint, or computed columns reference the column changed.

  • Wenn ein Index, eine Statistik oder ein Volltextindex für die Spalte erstellt werden.If any index, statistics, or full-text index are created on the column. Statistiken, die automatisch für die geänderte Spalte erstellt wurden, werden gelöscht, wenn die Spaltensortierung geändert wird.Statistics created automatically on the column changed are dropped if the column collation is changed.

  • Wenn eine schemagebundene Sicht oder Funktion auf die Spalte verweist.If a schema-bound view or function references the column.

    Weitere Informationen finden Sie unter COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Gibt an, ob die Spalte NULL-Werte akzeptiert.Specifies whether the column can accept null values. Spalten, die keine NULL-Werte zulassen, können mit ALTER TABLE nur hinzugefügt werden, wenn für sie ein Standardwert angegeben ist oder wenn die Tabelle leer ist.Columns that do not allow null values can be added with ALTER TABLE only if they have a default specified or if the table is empty. NOT NULL kann nur für berechnete Spalten angegeben werden, wenn auch PERSISTED angegeben ist.NOT NULL can be specified for computed columns only if PERSISTED is also specified. 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.If the new column allows null values and no default is specified, the new column contains a null value for each row in the table. Wenn die neue Spalte NULL-Werte zulässt und eine Standarddefinition mit der neuen Spalte hinzugefügt wird, kann WITH VALUES verwendet werden, um den Standardwert in der neuen Spalte für jede vorhandene Zeile in der Tabelle zu speichern.If the new column allows null values and a default definition is added with the new column, WITH VALUES can be used to store the default value in the new column for each existing row in the table.

Wenn die neue Spalte keine NULL-Werte zulässt und die Tabelle nicht leer ist, muss eine DEFAULT-Definition mit der neuen Spalte hinzugefügt werden. Die neue Spalte wird dann automatisch in jeder vorhandenen Zeile mit dem Standardwert geladen.If the new column does not allow null values and the table is not empty, a DEFAULT definition must be added with the new column, and the new column automatically loads with the default value in the new columns in each existing row.

Durch die Angabe von NULL in ALTER COLUMN kann erzwungen werden, dass eine NOT NULL-Spalte, mit Ausnahme von Spalten in PRIMARY KEY-Einschränkungen, NULL-Werte zulässt.NULL can be specified in ALTER COLUMN to force a NOT NULL column to allow null values, except for columns in PRIMARY KEY constraints. NOT NULL kann nur in ALTER COLUMN angegeben werden, wenn die Spalte keine NULL-Werte enthält.NOT NULL can be specified in ALTER COLUMN only if the column contains no null values. Die NULL-Werte müssen auf einen beliebigen Wert aktualisiert werden, damit ALTER COLUMN NOT NULL zulässig ist. Beispiel:The null values must be updated to some value before the ALTER COLUMN NOT NULL is allowed, for example:

UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL;  
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL;  

Wenn Sie eine Tabelle mit der CREATE TABLE- oder ALTER TABLE-Anweisung erstellen bzw. ändern, beeinflussen die Datenbank- und Sitzungseinstellungen die NULL-Zulässigkeit des in einer Spaltendefinition verwendeten Datentyps und überschreiben diese möglicherweise.When you create or alter a table with the CREATE TABLE or ALTER TABLE statements, the database and session settings influence and possibly override the nullability of the data type that is used in a column definition. Es wird empfohlen, eine nicht berechnete Spalte stets explizit als NULL oder NOT NULL zu definieren.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns.

Wenn Sie eine Spalte mit einem benutzerdefinierten Datentyp hinzufügen, wird empfohlen, dass Sie die Spalte mit der gleichen NULL-Zulässigkeit wie der des benutzerdefinierten Datentyps definieren und einen Standardwert für die Spalte angeben.If you add a column with a user-defined data type, we recommend that you define the column with the same nullability as the user-defined data type and specify a default value for the column. Weitere Informationen finden Sie unter CREATE TABLE (Transact-SQL).For more information, see CREATE TABLE (Transact-SQL).

Hinweis

Wenn NULL oder NOT NULL mit ALTER COLUMN angegeben New_data_type [(Genauigkeit [, Skalierung ])] muss auch angegeben werden.If NULL or NOT NULL is specified with ALTER COLUMN, new_data_type [(precision [, scale ])] must also be specified. Wenn Datentyp, Genauigkeit und Dezimalstellen nicht geändert werden, geben Sie die aktuellen Spaltenwerte an.If the data type, precision, and scale are not changed, specify the current column values.

[ {ADD | DROP} ROWGUIDCOL ][ {ADD | DROP} ROWGUIDCOL ]
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass die ROWGUIDCOL-Eigenschaft der angegebenen Spalte hinzugefügt oder aus ihr gelöscht wird.Specifies the ROWGUIDCOL property is added to or dropped from the specified column. ROWGUIDCOL zeigt an, dass die Spalte eine GUID-Spalte für eine Zeile darstellt.ROWGUIDCOL indicates that the column is a row GUID column. Nur ein "uniqueidentifier" -Spalte pro Tabelle kann als ROWGUIDCOL-Spalte gekennzeichnet werden, und die ROWGUIDCOL-Eigenschaft kann nur für zugewiesen werden eine "uniqueidentifier" Spalte.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column, and the ROWGUIDCOL property can be assigned only to a uniqueidentifier column. ROWGUIDCOL kann keiner Spalte eines benutzerdefinierten Datentyps zugewiesen werden.ROWGUIDCOL cannot be assigned to a column of a user-defined data type.

ROWGUIDCOL erzwingt keine Eindeutigkeit der in der Spalte gespeicherten Werte und generiert nicht automatisch Werte für neue Zeilen, die in die Tabelle eingefügt werden.ROWGUIDCOL does not enforce uniqueness of the values that are stored in the column and does not automatically generate values for new rows that are inserted into the table. 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.To generate unique values for each column, either use the NEWID function on INSERT statements or specify the NEWID function as the default for the column.

[ {ADD | DROP} PERSISTED ][ {ADD | DROP} PERSISTED ]
Gibt an, dass die PERSISTED-Eigenschaft der angegebenen Spalte hinzugefügt oder aus ihr gelöscht wird.Specifies that the PERSISTED property is added to or dropped from the specified column. Die Spalte muss eine berechnete Spalte sein, die durch einen deterministischen Ausdruck definiert ist.The column must be a computed column that is defined with a deterministic expression. Für Spalten, die als PERSISTED angegeben werden, speichert das DatenbankmodulDatabase Engine die berechneten Werte physisch in der Tabelle und aktualisiert die Werte, wenn andere Spalten, von denen die berechnete Spalte abhängt, aktualisiert werden.For columns specified as PERSISTED, the DatenbankmodulDatabase Engine physically stores the computed values in the table and updates the values when any other columns on which the computed column depends are updated. Durch Kennzeichnen einer berechneten Spalte als PERSISTED können Sie Indizes für berechnete Spalten erstellen, die durch deterministische, aber nicht genaue Ausdrücke definiert sind.By marking a computed column as PERSISTED, you can create indexes on computed columns defined on expressions that are deterministic, but not precise. Weitere Informationen finden Sie unter Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

Jede berechnete Spalte, die als Partitionierungsspalte einer partitionierten Tabelle verwendet wird, muss explizit als PERSISTED gekennzeichnet sein.Any computed column that is used as a partitioning column of a partitioned table must be explicitly marked PERSISTED.

DROP NOT FOR REPLICATIONDROP NOT FOR REPLICATION
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass Werte in Identitätsspalten inkrementiert werden, wenn Replikations-Agents Einfügevorgänge ausführen.Specifies that values are incremented in identity columns when replication agents perform insert operations. Diese Klausel kann angegeben werden, nur wenn Column_name Identitätsspalte ist.This clause can be specified only if column_name is an identity column.

SPARSESPARSE
Gibt an, dass die Spalte eine Sparsespalte ist.Indicates that the column is a sparse column. Der Speicher für Sparsespalten ist für NULL-Werte optimiert.The storage of sparse columns is optimized for null values. Spalten mit geringer Dichte können nicht als NOT NULL festgelegt werden.Sparse columns cannot be designated as NOT NULL. Beim Umwandeln einer Spalte mit geringer Dichte in eine Spalte ohne geringe Dichte oder umgekehrt wird die Tabelle für die Dauer der Befehlsausführung gesperrt.Converting a column from sparse to nonsparse or from nonsparse to sparse locks the table for the duration of the command execution. Sie müssen möglicherweise die REBUILD-Klausel verwenden, um Speicherplatzeinsparungen freizugeben.You may need to use the REBUILD clause to reclaim any space savings. Zusätzliche Einschränkungen und Weitere Informationen zu Spalten mit geringer Dichte finden Sie unter Use Sparse Columns.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKIERTE hinzufügen mit (Funktion = " Mask_function ")ADD MASKED WITH ( FUNCTION = ' mask_function ')
Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, einer dynamischen Datenmaske.Specifies a dynamic data mask. Mask_function ist der Name der Maskierungsfunktion mit den entsprechenden Parametern.mask_function is the name of the masking function with the appropriate parameters. Drei Funktionen sind verfügbar:Three functions are available:

  • default()default()
  • Email()email()
  • partial()partial()
  • Zufallsvariable()random()

    Verwenden Sie zum Löschen einer Maske DROP MASKED.To drop a mask, use DROP MASKED. Funktionsparameter, finden Sie unter Dynamic Data Masking.For function parameters, see Dynamic Data Masking.

MIT (ONLINE = ON | OFF) <wie beim Ändern einer Spalteninhalts >WITH ( ONLINE = ON | OFF) <as applies to altering a column>
Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Ermöglicht verschiedene Aktionen zum Ändern einer Spalte, während die Tabelle verfügbar bleibt.Allows many alter column actions to be performed while the table remains available. Die Standardeinstellung ist OFF.Default is OFF. ALTER COLUMN kann online für Spaltenänderungen in Bezug auf Datentyp, Spaltenlänge, Genauigkeit, NULL-Zulässigkeit, geringe Dichte und Sortierung ausgeführt werden.Alter column can be performed on line for column changes related to data type, column length or precision, nullability, sparseness, and collation.

Die Onlineänderung ermöglicht, dass vom Benutzer und automatisch erstellte Statistiken weiterhin während des ALTER COLUMN-Vorgangs auf die geänderte Spalte verweisen.Online alter column allows user created and auto statistics to reference the altered column for the duration of the ALTER COLUMN operation. Dadurch können Abfragen wie gewohnt ausgeführt werden.This allows queries to perform as usual. Nach dem Beenden des Vorgangs werden automatisch erstellte Statistiken, die auf die Spalte verweisen, gelöscht, und vom Benutzer erstellte Statistiken werden ungültig.At the end of the operation, auto-stats that reference the column are dropped and user-created stats are invalidated. Der Benutzer muss benutzergenerierte Statistiken manuell aktualisieren, nachdem der Vorgang abgeschlossen wurde.The user must manually update user-generated statistics after the operation is completed. Wenn die Spalte Teil eines Filterausdrucks für Statistiken oder Indizes ist, und klicken Sie dann einen Alter-Spalte-Vorgang nicht ausgeführt werden kann.If the column is part of a filter expression for any statistics or indexes then you cannot perform an alter column operation.

  • Während des Onlineänderungsvorgangs werden alle Vorgänge blockiert, die von der Spalte abhängig sein könnten (Index, Ansichten usw.), oder es tritt ein Fehler mit einer entsprechenden Fehlermeldung auf.While the online alter column operation is running, all operations that could take a dependency on the column (index, views, etc.) will block or fail with an appropriate error. Dadurch wird sichergestellt, dass bei der Onlineänderung der Spalte kein Fehler aufgrund von Abhängigkeiten auftritt, die während des Vorgangs entstanden sind.This guarantees that online alter column will not fail because of dependencies introduced while the operation was running.

  • Das Ändern einer Spalte von NOT NULL auf NULL ist bei einem Onlinevorgang nicht möglich, wenn nicht gruppierte Indizes auf die geänderte Spalte verweisen.Altering a column from NOT NULL to NULL is not supported as an online operation when the altered column is references by nonclustered indexes.

  • Die Onlineänderung wird nicht unterstützt, wenn auf die Spalte mit einer CHECK-Einschränkung verwiesen wird und der Änderungsvorgang die Genauigkeit der Spalte („numeric“ oder „datetime“) einschränkt.Online alter is not supported when the column is referenced by a check constraint and the alter operation is restricting the precision of the column (numeric or datetime).

  • Die Low_priority_lock_wait Option kann nicht verwendet werden, mit der onlinespaltenänderung.The low_priority_lock_wait option cannot be used with online alter column.

  • ALTER COLUMN …ALTER COLUMN … ADD/DROP PERSISTED wird bei der Onlinespaltenänderung nicht unterstützt.ADD/DROP PERSISTED is not supported for online alter column.

  • ALTER COLUMN …ALTER COLUMN … ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION wird von der Onlinespaltenänderung nicht beeinflusst.ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION is not affected by online alter column.

  • Die Onlinespaltenänderung von Tabellen mit Änderungsnachverfolgung und von Tabellen, die ein Mergereplikationsverleger sind, wird nicht unterstützt.Online alter column does not support altering a table where change tracking is enabled or that is a publisher of merge replication.

  • Die Onlinespaltenänderung unterstützt nicht das Ändern von oder in CLR-Datentypen.Online alter column does not support altering from or to CLR data types.

  • Die Änderung in einen XML-Datentyp mit einer von der aktuellen Schemaauflistung abweichenden Auflistung wird von der Onlinespaltenänderung nicht unterstützt.Online alter column does not support altering to an XML data type that has a schema collection different than the current schema collection.

  • Durch die Onlinespaltenänderung werden die Einschränkungen, die festlegen, wann eine Spalte geändert werden kann, nicht verringert.Online alter column does not reduce the restrictions on when a column can be altered. Durch Verweise von Index/Statistiken usw. tritt möglicherweise ein Fehler beim Änderungsvorgang auf.References by index/stats, etc. might cause the alter to fail.

  • Mit der Onlinespaltenänderung können nicht mehrere Spalten gleichzeitig geändert werden.Online alter column does not support altering more than one column concurrently.

  • Onlinespaltenänderung Spalte wirkt sich nicht im Falle der systemversionsverwaltung unterliegende temporal-Tabelle.Online alter column has no effect in case of system-versioned temporal table. Die Operation ALTER COLUMN wird nicht im Modus „online“ durchgeführt. Dies gilt unabhängig vom Wert, der für die Option ONLINE festgelegt wurde.ALTER column is not performed as online regardless of which value was specified for ONLINE option.

Für die Onlinespaltenänderung gelten ähnliche Anforderungen, Einschränkungen und Funktionen wie für die Online-Indexneuerstellung.Online alter column has similar requirements, restrictions, and functionality as online index rebuild. Dies schließt Folgendes ein:This includes:

  • Die Online-Indexneuerstellung wird nicht unterstützt, wenn die Tabelle ältere LOB- oder Filestream-Spalten enthält oder die Tabelle über einen Columnstore-Index verfügt.Online index rebuild is not supported when the table contains legacy LOB or filestream columns or when the table has a columnstore index. Die gleichen Einschränkungen gelten für die Onlinespaltenänderung.The same limitations apply for online alter column.

  • Eine vorhandene Spalte, die geändert wird, erfordert die doppelte Speicherplatzzuordnung: für die ursprüngliche Spalte und für die neu erstellte, ausgeblendete Spalte.An existing column being altered requires twice the space allocation; for the original column and for the newly created hidden column.

  • Die Sperrstrategie während eines Onlinevorgangs zur Spaltenänderung folgt demselben Sperrmuster wie die Onlineindexerstellung.The locking strategy during an alter column online operation follows the same locking pattern used for online index build.

WITH CHECK | WITH NOCHECKWITH CHECK | WITH NOCHECK
Gibt an, ob die Daten in der Tabelle bei einer neu hinzugefügten oder erneut aktivierten FOREIGN KEY- oder CHECK-Einschränkung überprüft werden.Specifies whether the data in the table is or is not validated against a newly added or re-enabled FOREIGN KEY or CHECK constraint. Fehlt die Angabe, so wird WITH CHECK für neue Einschränkungen und WITH NOCHECK für erneut aktivierte Einschränkungen angenommen.If not specified, WITH CHECK is assumed for new constraints, and WITH NOCHECK is assumed for re-enabled constraints.

Verwenden Sie WITH NOCHECK, wenn neue CHECK- oder FOREIGN KEY-Einschränkungen nicht für vorhandene Daten überprüft werden sollen.If you do not want to verify new CHECK or FOREIGN KEY constraints against existing data, use WITH NOCHECK. Diese Vorgehensweise wird nur in seltenen Fällen empfohlen.We do not recommend doing this, except in rare cases. Die neue Einschränkung wird bei allen späteren Datenupdates ausgewertet.The new constraint will be evaluated in all later data updates. Einschränkungsverletzungen, die beim Hinzufügen der Einschränkung durch WITH NOCHECK unterdrückt werden, können zu Fehlern bei zukünftigen Updates führen, wenn Zeilen mit Daten aktualisiert werden, die der Einschränkung nicht entsprechen.Any constraint violations that are suppressed by WITH NOCHECK when the constraint is added may cause future updates to fail if they update rows with data that does not comply with the constraint.

Der Abfrageoptimierer berücksichtigt mit WITH NOCHECK definierte Einschränkungen nicht.The query optimizer does not consider constraints that are defined WITH NOCHECK. Diese Einschränkungen werden ignoriert, bis sie mithilfe von ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALL erneut aktiviert werden.Such constraints are ignored until they are re-enabled by using ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALL.

ADDADD
Gibt an, dass eine oder mehrere Spaltendefinitionen, Definitionen berechneter Spalten oder tabelleneinschränkungen hinzugefügt werden, oder die Spalten, die vom System für die versionsverwaltung durch das System verwendet wird.Specifies that one or more column definitions, computed column definitions, or table constraints are added, or the columns that the system will use for system versioning.

PERIOD FOR SYSTEM_TIME (System_start_time_column_name, System_end_time_column_name)PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )
Gilt für: SQL Server 2017SQL Server 2017 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2017SQL Server 2017 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt die Namen der Spalten, die vom System verwendet wird, um den Zeitraum aufzuzeichnen, für den ein Datensatz gültig ist.Specifies the names of the columns that the system will use to record the period for which a record is valid. Sie können vorhandene Spalten angeben oder erstellen neue Spalten als Teil des ADD PERIOD FOR SYSTEM_TIME-Arguments.You can specify existing columns or create new columns as part of the ADD PERIOD FOR SYSTEM_TIME argument. Die Spalten muss den datetime2-Datentyp aufweisen und muss definiert werden, als NOT NULL.The columns must have the datatype of datetime2 and must be defined as NOT NULL. Wenn die Period-Spalte als NULL definiert ist, wird ein Fehler ausgelöst.If a period column is defined as NULL, an error will be thrown. Sie können definieren, eine Column_constraint ( Transact-SQL ) und/oder angeben von Standardwerten für Spalten für die Spalten System_start_time und System_end_time.You can define a column_constraint (Transact-SQL) and/or Specify Default Values for Columns for the system_start_time and system_end_time columns. Siehe Beispiel A in die Systemversionsverwaltung Beispiele unten veranschaulicht die Verwendung eines standardmäßigen Werts für die Spalte System_end_time.See Example A in the System Versioning examples below demonstrating the use of a default value for the system_end_time column.

Verwenden Sie dieses Argument zusammen mit dem Festlegen von SYSTEM_VERSIONING-Argument, zum Aktivieren der systemversionsverwaltung für eine vorhandene Tabelle.Use this argument in conjunction with the SET SYSTEM_VERSIONING argument to enable system versioning on an existing table. Weitere Informationen finden Sie unter Zeittabellen und Einstieg in temporale Tabellen in Azure SQL-Datenbank.For more information, see Temporal Tables and Getting Started with Temporal Tables in Azure SQL Database.

Als der SQL Server 2017SQL Server 2017, Benutzer werden in der Lage, markieren Sie eine oder beide zeitraumspalten mit HIDDEN Flag diese Spalten implizit ausgeblendet werden, dass wählen * FROM <Tabelle > gibt einen Wert für diese Spalten nicht zurück.As of SQL Server 2017SQL Server 2017, users will be able to mark one or both period columns with HIDDEN flag to implicitly hide these columns such that SELECT * FROM<table> does not return a value for those columns. Standardmäßig werden die Periode-Spalten nicht ausgeblendet.By default, period columns are not hidden. Um verwendet werden, müssen ausgeblendete Spalten explizit in allen Abfragen eingeschlossen werden, die direkt auf die temporale Tabelle verweisen.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table.

DROPDROP
Gibt an, dass eine oder mehrere Spaltendefinitionen, Definitionen berechneter Spalten oder tabelleneinschränkungen abgelegt werden, oder die Spezifikation für die Spalten zu löschen, die vom System für die versionsverwaltung durch das System verwendet wird.Specifies that one or more column definitions, computed column definitions, or table constraints are dropped, or to drop the specification for the columns that the system will use for system versioning.

Einschränkung Constraint_nameCONSTRAINT constraint_name
Gibt an, dass Constraint_name aus der Tabelle entfernt wird.Specifies that constraint_name is removed from the table. Es können mehrere Einschränkungen aufgelistet werden.Multiple constraints can be listed.

Der benutzerdefinierte oder vom System bereitgestellte Name der Einschränkung kann bestimmt werden, durch Abfragen der check_constraint, Sys. default_constraints, Sys. key_constraints, und Sys. Foreign_Keys Katalogsichten.The user-defined or system-supplied name of the constraint can be determined by querying the sys.check_constraint, sys.default_constraints, sys.key_constraints, and sys.foreign_keys catalog views.

Eine PRIMARY KEY-Einschränkung kann nicht gelöscht werden, wenn ein XML-Index für die Tabelle vorhanden ist.A PRIMARY KEY constraint cannot be dropped if an XML index exists on the table.

Spalte Column_nameCOLUMN column_name
Gibt an, dass Constraint_name oder Column_name aus der Tabelle entfernt wird.Specifies that constraint_name or column_name is removed from the table. Es können mehrere Spalten aufgeführt werden.Multiple columns can be listed.

Unter folgenden Umständen kann eine Spalte nicht gelöscht werden:A column cannot be dropped when it is:

  • Wenn sie in einem Index verwendet wird.Used in an index.

  • Wenn sie in einer CHECK-, FOREIGN KEY-, UNIQUE- oder PRIMARY KEY-Einschränkung verwendet wird.Used in a CHECK, FOREIGN KEY, UNIQUE, or PRIMARY KEY constraint.

  • Wenn ihr ein mit dem DEFAULT-Schlüsselwort definierter Standardwert zugeordnet ist oder sie an ein Standardobjekt gebunden ist.Associated with a default that is defined with the DEFAULT keyword, or bound to a default object.

  • Wenn sie an eine Regel gebunden ist.Bound to a rule.

Hinweis

Durch Löschen einer Spalte wird der Speicherplatz der Spalte nicht freigegeben.Dropping a column does not reclaim the disk space of the column. Unter Umständen müssen Sie den Speicherplatz einer gelöschten Spalte freigeben, wenn das Limit der Zeilengröße einer Tabelle fast erreicht oder überschritten ist.You may have to reclaim the disk space of a dropped column when the row size of a table is near, or has exceeded, its limit. Zum Freigeben des Speicherplatzes für die Tabelle einen gruppierten Index erstellen oder Neuerstellen eines vorhandenen gruppierten Indexes mit ALTER INDEX.Reclaim space by creating a clustered index on the table or rebuilding an existing clustered index by using ALTER INDEX. Informationen zu den Auswirkungen gelöschter LOB-Datentypen, finden Sie in diesem CSS-Blogeintrag.For information about the impact of dropping LOB data types, see this CSS blog entry.

PERIOD FOR SYSTEM_TIMEPERIOD FOR SYSTEM_TIME
Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Löscht die Spezifikation für die Spalten, die vom System für die versionsverwaltung durch das System verwendet wird.Drops the specification for the columns that the system will use for system versioning.

MIT <Drop_clustered_constraint_option >WITH <drop_clustered_constraint_option>
Gibt an, dass mindestens eine Option zum Löschen einer gruppierten Einschränkung festgelegt wurde.Specifies that one or more drop clustered constraint options are set.

MAXDOP = Max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Überschreibt die Max. Grad an Parallelität Konfigurationsoption nur für die Dauer des Vorgangs.Overrides the max degree of parallelism configuration option only for the duration of the operation. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität.For more information, see Configure the max degree of parallelism Server Configuration Option.

Verwenden Sie die MAXDOP-Option, um die Anzahl der Prozessoren zu beschränken, die für die Ausführung paralleler Pläne verwendet werden.Use the MAXDOP option to limit the number of processors used in parallel plan execution. Maximal sind 64 Prozessoren zulässig.The maximum is 64 processors.

Max_degree_of_parallelism kann einen der folgenden Werte sein:max_degree_of_parallelism can be one of the following values:

11
Unterdrückt das Generieren paralleler Pläne.Suppresses parallel plan generation.

>1>1
Begrenzt die Höchstzahl von Prozessoren in einem parallelen Indexvorgang auf die angegebene ZahlRestricts the maximum number of processors used in a parallel index operation to the specified number.

0 (Standard)0 (default)
Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.Uses the actual number of processors or fewer based on the current system workload.

Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.For more information, see Configure Parallel Index Operations.

Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von SQL ServerSQL Server verfügbar.Parallel index operations are not available in every edition of SQL ServerSQL Server. Weitere Informationen finden Sie unter Editionen und unterstützte Funktionen für SQL Server 2016.For more information, see Editions and Supported Features for SQL Server 2016.

ONLINE = {ON | OFF } <wie für Drop_clustered_constraint_option >ONLINE = { ON | OFF } <as applies to drop_clustered_constraint_option>
Gibt an, ob die zugrunde liegenden Tabellen und zugeordneten Indizes für Abfragen und Datenänderungen während des Indexvorgangs verfügbar sind.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. Der Standardwert ist OFF.The default is OFF. REBUILD kann als ONLINE-Vorgang ausgeführt werden.REBUILD can be performed as an ONLINE operation.

ONON
Lang andauernde Sperren werden nicht für die Dauer des Indexvorgangs aufrechterhalten.Long-term table locks are not held for the duration of the index operation. Während der Hauptphase des Indexvorgangs wird nur eine beabsichtigte freigegebene Sperre (IS) für die Quelltabelle aufrechterhalten.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. So können Abfragen oder Updates der zugrunde liegenden Tabelle und Indizes fortgesetzt werden.This enables queries or updates to the underlying table and indexes to continue. Zu Beginn des Vorgangs wird das Quellobjekt für sehr kurze Zeit mit einer gemeinsamen Sperre (S) belegt.At the start of the operation, a Shared (S) lock is held on the source object for a very short time. Am Ende des Vorgangs wird für kurze Zeit eine gemeinsame Sperre (S) für die Quelle eingerichtet, wenn ein nicht gruppierter Index erstellt wird. Eine Schemaänderungssperre (SCH-M) wird dagegen eingerichtet, wenn ein gruppierter Index online erstellt oder gelöscht wird und wenn ein gruppierter oder nicht gruppierter Index neu erstellt wird.At the end of the operation, for a short time, an S (Shared) lock is acquired on the source if a nonclustered index is being created; or an SCH-M (Schema Modification) lock is acquired when a clustered index is created or dropped online and when a clustered or nonclustered index is being rebuilt. ONLINE kann nicht auf ON festgelegt werden, wenn ein Index auf einer lokalen temporären Tabelle erstellt wird.ONLINE cannot be set to ON when an index is being created on a local temporary table. Nur ein Heap-Neuerstellungsvorgang mit einem einzelnen Thread ist zulässig.Only single-threaded heap rebuild operation is allowed.

Zum Ausführen der DDL-Code für SWITCH oder Neuerstellung von Onlineindizes, alle aktiven blockierenden Transaktionen, die für eine bestimmte Tabelle abgeschlossen werden muss.To execute the DDL for SWITCH or online index rebuild, all active blocking transactions running on a particular table must be completed. Bei der Ausführung der SWITCH oder Neuerstellungsvorgang wird verhindert, dass neue Transaktion gestartet und kann den Durchsatz arbeitsauslastung beeinträchtigen und Zugriff auf die zugrunde liegende Tabelle vorübergehend zu verzögern.When executing, the SWITCH or rebuild operation prevents new transaction from starting and might significantly affect the workload throughput and temporarily delay access to the underlying table.

OFFOFF
Die Tabellensperren werden für die Dauer des Indexvorgangs angewendet.Table locks are applied for the duration of the index operation. Ein Offlineindexvorgang, bei dem ein gruppierter Index erstellt, neu erstellt oder gelöscht bzw. ein nicht gruppierter Index neu erstellt oder gelöscht wird, aktiviert eine Schemaänderungssperre (SCH-M) für die Tabelle.An offline index operation that creates, rebuilds, or drops a clustered index, or rebuilds or drops a nonclustered index, acquires a Schema modification (Sch-M) lock on the table. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.This prevents all user access to the underlying table for the duration of the operation. Ein Offlineindexvorgang, bei dem ein nicht gruppierter Index erstellt wird, aktiviert eine freigegebene Sperre (S) für die Tabelle.An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. Dadurch werden Updates der zugrunde liegenden Tabelle verhindert. Lesevorgänge, wie SELECT-Anweisungen, sind jedoch zulässig.This prevents updates to the underlying table but allows read operations, such as SELECT statements. Heap-Neuerstellungsvorgänge mit mehreren Threads sind zulässig.Multi-threaded heap rebuild operations are allowed.

Weitere Informationen finden Sie unter wie Onlineindexvorgängen.For more information, see How Online Index Operations Work.

Hinweis

Onlineindexvorgänge sind nicht in jeder Edition von SQL ServerSQL Serververfügbar.Online index operations are not available in every edition of SQL ServerSQL Server. Weitere Informationen finden Sie unter Editionen und unterstützte Funktionen für SQL Server 2016.For more information, see Editions and Supported Features for SQL Server 2016.

MOVE TO { Partition_scheme_name(Column_name [1, ... n ] ) | Dateigruppe | "Standard" }MOVE TO { partition_scheme_name(column_name [ 1, ... n] ) | filegroup | "default" }
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt einen Speicherort an, an den die Datenzeilen verschoben werden sollen, die sich aktuell auf der Blattebene des gruppierten Indexes befinden.Specifies a location to move the data rows currently in the leaf level of the clustered index. Die Tabelle wird an den neuen Speicherort verschoben.The table is moved to the new location. Diese Option gilt nur für Einschränkungen, durch die ein gruppierter Index erstellt wird.This option applies only to constraints that create a clustered index.

Hinweis

In diesem Zusammenhang ist DEFAULT kein Schlüsselwort.In this context, default is not a keyword. Es ist ein Bezeichner für die Standarddateigruppe und muss begrenzt sein, wie in MOVE TO "Standard" oder MOVE TO [Standard].It is an identifier for the default filegroup and must be delimited, as in MOVE TO "default" or MOVE TO [default]. Wenn "Standard" angegeben ist, muss die QUOTED_IDENTIFIER-Option ON sein, für die aktuelle Sitzung.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. Dies ist die Standardeinstellung.This is the default setting. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

{ CHECK | NOCHECK } CONSTRAINT{ CHECK | NOCHECK } CONSTRAINT
Gibt an, dass Constraint_name aktiviert oder deaktiviert ist.Specifies that constraint_name is enabled or disabled. Diese Option kann nur mit FOREIGN KEY- und CHECK-Einschränkungen verwendet werden.This option can only be used with FOREIGN KEY and CHECK constraints. Wenn NOCHECK angegeben wird, wird die Einschränkung deaktiviert, und zukünftige Einfügungen oder Updates der Spalte werden nicht anhand der Einschränkungsbedingungen überprüft.When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT-, PRIMARY KEY- und UNIQUE-Einschränkungen können nicht deaktiviert werden.DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.

ALLALL
Gibt an, dass alle Einschränkungen entweder mit der NOCHECK-Option deaktiviert oder mit der CHECK-Option aktiviert werden.Specifies that all constraints are either disabled with the NOCHECK option or enabled with the CHECK option.

{ ENABLE | DISABLE } TRIGGER{ ENABLE | DISABLE } TRIGGER
Gibt an, dass Form Trigger_name aktiviert oder deaktiviert ist.Specifies that trigger_name is enabled or disabled. Ein Trigger bleibt auch dann für die Tabelle definiert, wenn er deaktiviert ist. Wenn jedoch INSERT-, UPDATE- oder DELETE-Anweisungen in der Tabelle ausgeführt werden, werden die Aktionen im Trigger erst durchgeführt, wenn der Trigger erneut aktiviert wird.When a trigger is disabled it is still defined for the table; however, when INSERT, UPDATE, or DELETE statements are executed against the table, the actions in the trigger are not performed until the trigger is re-enabled.

ALLALL
Gibt an, dass alle Trigger in der Tabelle aktiviert oder deaktiviert werden.Specifies that all triggers in the table are enabled or disabled.

Form trigger_nametrigger_name
Gibt den Namen des Triggers an, der deaktiviert oder aktiviert werden soll.Specifies the name of the trigger to disable or enable.

{ ENABLE | DISABLE } CHANGE_TRACKING{ ENABLE | DISABLE } CHANGE_TRACKING
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, ob die Änderungsnachverfolgung für die Tabelle deaktiviert bzw. aktiviert wurde.Specifies whether change tracking is enabled disabled for the table. Standardmäßig ist die Änderungsnachverfolgung deaktiviert.By default, change tracking is disabled.

Diese Option ist nur dann verfügbar, wenn die Änderungsnachverfolgung für die Datenbank aktiviert ist.This option is available only when change tracking is enabled for the database. Weitere Informationen zu dieser Einstellung finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).For more information, see ALTER DATABASE SET Options (Transact-SQL).

Um die Änderungsnachverfolgung zu aktivieren, muss die Tabelle über einen Primärschlüssel verfügen.To enable change tracking, the table must have a primary key.

MIT ( TRACK_COLUMNS_UPDATED = {ON | OFF } )WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } )
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, ob das DatenbankmodulDatabase Engine verfolgt, welche Spalten mit Änderungsnachverfolgung aktualisiert wurden.Specifies whether the DatenbankmodulDatabase Engine tracks which change tracked columns were updated. Der Standardwert ist OFF.The default value is OFF.

SWITCH [PARTITION Source_partition_number_expression ] TO [ Schema_name.SWITCH [ PARTITION source_partition_number_expression ] TO [ schema_name. ] Target_table [PARTITION Target_partition_number_expression ]] target_table [ PARTITION target_partition_number_expression ]
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Verlagert einen Datenblock auf eine der folgenden Arten:Switches a block of data in one of the following ways:

  • Weist alle Daten einer Tabelle als Partition einer bereits vorhandenen partitionierten Tabelle neu zu.Reassigns all data of a table as a partition to an already-existing partitioned table.

  • Wechselt eine Partition von einer partitionierten Tabelle zu einer anderen.Switches a partition from one partitioned table to another.

  • Weist alle Daten aus einer Partition einer partitionierten Tabelle einer bereits vorhandenen nicht partitionierten Tabelle neu zu.Reassigns all data in one partition of a partitioned table to an existing non-partitioned table.

Wenn Tabelle ist eine partitionierte Tabelle Source_partition_number_expression muss angegeben werden.If table is a partitioned table, source_partition_number_expression must be specified. Wenn Target_table partitioniert ist, Target_partition_number_expression muss angegeben werden.If target_table is partitioned, target_partition_number_expression must be specified. Wenn die Daten einer Tabelle als Partition einer vorhandenen partitionierten Tabelle neu zugewiesen werden oder eine Partition von einer partitionierten Tabelle zu einer anderen gewechselt wird, muss die Zielpartition vorhanden und leer sein.If reassigning a table's data as a partition to an already-existing partitioned table, or switching a partition from one partitioned table to another, the target partition must exist and it must be empty.

Wenn die Daten einer Partition neu zugewiesen werden, sodass sie eine einzelne Tabelle bilden, muss die Zieltabelle bereits erstellt und leer sein.If reassigning one partition's data to form a single table, the target table must already be created and it must be empty. Die Quelltabelle oder -partition und die Zieltabelle oder -partition müssen sich in derselben Dateigruppe befinden.Both the source table or partition, and the target table or partition, must reside in the same filegroup. Die entsprechenden Indizes oder Indexpartitionen müssen sich ebenfalls in derselben Dateigruppe befinden.The corresponding indexes, or index partitions, must also reside in the same filegroup. Darüber hinaus gelten weitere Einschränkungen für das Wechseln von Partitionen.Many additional restrictions apply to switching partitions. Tabelle und Target_table darf nicht identisch sein.table and target_table cannot be the same. Target_table kann ein mehrteiliger Bezeichner sein.target_table can be a multi-part identifier.

Source_partition_number_expression und Target_partition_number_expression sind Konstante Ausdrücke, Variablen und Funktionen verweisen können.source_partition_number_expression and target_partition_number_expression are constant expressions that can reference variables and functions. Diese enthalten benutzerdefinierte Typvariablen und benutzerdefinierte Funktionen.These include user-defined type variables and user-defined functions. Sie können nicht auf Transact-SQLTransact-SQL-Ausdrücke verweisen.They cannot reference Transact-SQLTransact-SQL expressions.

Eine partitionierte Tabelle mit einem gruppierten rowstore-Index verhält sich wie einen partitionierten Heap:A partitioned table with a clustered columstore index behaves like a partitioned heap:

  • Der primäre Schlüssel muss den Partitionsschlüssel enthalten.The primary key must include the partition key.

  • Ein eindeutiger Index muss den Partitionsschlüssel enthalten.A unique index must include the partition key. Beachten Sie, einschließlich des partitionsschlüssels zu einem vorhandenen eindeutigen Index die Eindeutigkeit ändern kann.Note that including the partition key to an existing unique index can change the uniqueness.

  • Um Partitionen zu wechseln, müssen alle nicht gruppierten Indizes den Partitionsschlüssel enthalten.In order to switch partitions, all non-clustered indexes must include the partition key.

Für SWITCH -Einschränkung beim Verwenden der Replikation finden Sie unter replizieren partitionierter Tabellen und Indizes.For SWITCH restriction when using replication, see Replicate Partitioned Tables and Indexes.

Nicht gruppierte columnstore-Indizes für erstellten SQL ServerSQL Server 2016 CTP1, und für SQL-Datenbank vor Version V12 wurden in einem nur-Lese Format.Nonclustered columnstore indexes built for SQL ServerSQL Server 2016 CTP1, and for SQL Database before version V12 were in a read-only format. Nicht gruppierte columnstore-Indizes müssen neu erstellt werden auf das aktuelle Format (die aktualisiert werden kann) vor jeder PARTITION-Vorgänge ausgeführt werden können.Nonclustered columnstore indexes must be rebuilt to the current format (which is updatable) before any PARTITION operations can be performed.

Legen Sie ( FILESTREAM_ON = { Partition_scheme_name | Filestream_filegroup_name | " standardmäßige" | "NULL" })SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" })
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017. |Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.|

Gibt an, wo FILESTREAM-Daten gespeichert werden.Specifies where FILESTREAM data is stored.

ALTER TABLE mit der SET FILESTREAM_ON-Klausel ist nur erfolgreich, wenn die Tabelle keine FILESTREAM-Spalten enthält.ALTER TABLE with the SET FILESTREAM_ON clause will succeed only if the table has no FILESTREAM columns. Die FILESTREAM-Spalten können mit einer zweiten ALTER TABLE-Anweisung hinzugefügt werden.The FILESTREAM columns can be added by using a second ALTER TABLE statement.

Wenn Partition_scheme_name angegeben wird, den Regeln für CREATE TABLE anwenden.If partition_scheme_name is specified, the rules for CREATE TABLE apply. Die Tabelle sollte bereits für Zeilendaten partitioniert sein, und das Partitionsschema muss die gleiche Partitionsfunktion und die gleichen Partitionsspalten wie das FILESTREAM-Partitionsschema verwenden.The table should already be partitioned for row data, and its partition scheme must use the same partition function and columns as the FILESTREAM partition scheme.

Filestream_filegroup_name gibt den Namen einer FILESTREAM-Dateigruppe.filestream_filegroup_name specifies the name of a FILESTREAM filegroup. Die Dateigruppe muss eine Datei, die definiert wird, für die Dateigruppe enthalten, mithilfe einer CREATE DATABASE oder ALTER DATABASE -Anweisung oder ein Fehler wird ausgelöst.The filegroup must have one file that is defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement, or an error is raised.

"Standard" gibt an, die FILESTREAM-Dateigruppe mit dem DEFAULT-Eigenschaftensatz."default" specifies the FILESTREAM filegroup with the DEFAULT property set. Wenn keine FILESTREAM-Dateigruppe vorhanden ist, wird ein Fehler ausgelöst.If there is no FILESTREAM filegroup, an error is raised.

"NULL" gibt an, dass alle Verweise auf FILESTREAM-Dateigruppen für die Tabelle entfernt werden."NULL" specifies that all references to FILESTREAM filegroups for the table will be removed. Alle FILESTREAM-Spalten müssen zuerst gelöscht werden.All FILESTREAM columns must be dropped first. Sie müssen SET FILESTREAM_ON verwenden= "NULL" alle FILESTREAM-Daten zu löschen, die einer Tabelle zugeordnet ist.You must use SET FILESTREAM_ON="NULL" to delete all FILESTREAM data that is associated with a table.

Legen Sie ( SYSTEM_VERSIONING = {OFF | ON [(HISTORY_TABLE = Schema_name.SET ( SYSTEM_VERSIONING = { OFF | ON [ ( HISTORY_TABLE = schema_name . History_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF}])]} )history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] } )
Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Entweder versionsverwaltung durch das System einer Tabelle aktiviert oder deaktiviert versionsverwaltung durch das System einer Tabelle.Either disables system versioning of a table or enables system versioning of a table. Zum Aktivieren einer Tabelle versionsverwaltung durch das System überprüft, dass der Datentyp, NULL-Zulässigkeit Einschränkung und primary Key-Einschränkung-Anforderungen für die versionsverwaltung durch das System erfüllt sind.To enable system versioning of a table, the system verifies that the datatype, nullability constraint, and primary key constraint requirements for system versioning are met. Wenn das Argument HISTORY_TABLE nicht verwendet wird, wird das System generiert eine neuen Verlaufstabelle, die dem Schema der aktuellen Tabelle aus, erstellen eine Verknüpfung zwischen den beiden Tabellen entsprechen und kann das System den Verlauf jeder Datensatz in der aktuellen Tabelle in der Verlaufstabelle aufgezeichnet.If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. Der Name dieser Verlaufstabelle MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Wenn das Argument HISTORY_TABLE einen Link zu erstellen und verwenden eine vorhandene Verlaufstabelle verwendet wird, wird die Verknüpfung zwischen der aktuellen Tabelle und der angegebenen Tabelle erstellt.If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. Wenn Sie einen Link zu einer vorhandenen Verlaufstabelle erstellen, können Sie eine Datenkonsistenzprüfung durchführen.When creating a link to an existing history table, you can choose to perform a data consistency check. Diese datenkonsistenzprüfung stellt sicher, dass vorhandene Einträge sich nicht überlappen.This data consistency check ensures that existing records do not overlap. Die Datenkonsistenzprüfung ist standardmäßig aktiviert.Performing the data consistency check is the default. Weitere Informationen finden Sie unter Temporal Tables.For more information, see Temporal Tables.

HISTORY_RETENTION_PERIOD = { UNENDLICHE | Anzahl {Tag | TAGE | WOCHE | WOCHEN | MONAT | MONATE | JAHR | Jahre}} betrifft: Azure SQL-DatenbankAzure SQL Database.HISTORY_RETENTION_PERIOD = { INFINITE | number {DAY | DAYS | WEEK | WEEKS | MONTH | MONTHS | YEAR | YEARS} } Applies to: Azure SQL-DatenbankAzure SQL Database.

Gibt die begrenzter oder Infinite Aufbewahrung Verlaufsdaten in temporalen Tabelle mit.Specifies finite or infinte retention for historical data in temporal table. Wenn nicht angegeben, wird eine unbegrenzte Aufbewahrungsdauer ausgegangen.If omitted, infinite retention is assumed.

LEGEN SIE ( LOCK_ESCALATION = {AUTOMATISCH | TABELLE | DEAKTIVIEREN SIE} )SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt die zulässigen Methoden der Sperrenausweitung für eine Tabelle an.Specifies the allowed methods of lock escalation for a table.

AUTOAUTO
Mit dieser Option kann vom SQL Server-DatenbankmodulSQL Server Database Engine die für das Tabellenschema geeignete Granularität der Sperrenausweitung ausgewählt werden.This option allows SQL Server-DatenbankmodulSQL Server Database Engine to select the lock escalation granularity that is appropriate for the table schema.

  • Wenn die Tabelle partitioniert ist, wird die Sperrenausweitung bis zur Partition erlaubt.If the table is partitioned, lock escalation will be allowed to partition. Nach der Ausweitung der Sperre auf die Partitionsebene wird die Sperrenausweitung nicht bis zur TABLE-Granularität fortgeführt.After the lock is escalated to the partition level, the lock will not be escalated later to TABLE granularity.

  • Wenn die Tabelle nicht partitioniert ist, wird die Sperre bis zur TABLE-Granularität ausgeweitet.If the table is not partitioned, the lock escalation will be done to the TABLE granularity.

TABLETABLE
Die Sperrenausweitung wird immer mit der Granularität der Tabellenebene ausgeführt, unabhängig davon, ob die Tabelle partitioniert ist.Lock escalation will be done at table-level granularity regardless whether the table is partitioned or not partitioned. TABLE ist der Standardwert.TABLE is the default value.

DISABLEDISABLE
Verhindert die Sperrenausweitung in den meisten Fällen.Prevents lock escalation in most cases. Sperren auf Tabellenebene sind jedoch nicht völlig ausgeschlossen.Table-level locks are not completely disallowed. Wenn Sie z. B. eine Tabelle scannen, die keinen gruppierten Index unter der Serializable-Isolationsstufe aufweist, muss das DatenbankmodulDatabase Engine eine Tabellensperre zulassen, damit die Datenintegrität gewahrt wird.For example, when you are scanning a table that has no clustered index under the serializable isolation level, DatenbankmodulDatabase Engine must take a table lock to protect data integrity.

REBUILDREBUILD
Verwenden Sie die REBUILD WITH-Syntax, um eine gesamte Tabelle neu zu erstellen, einschließlich aller Partitionen in einer partitionierten Tabelle.Use the REBUILD WITH syntax to rebuild an entire table including all the partitions in a partitioned table. Wenn die Tabelle einen gruppierten Index besitzt, erstellt die REBUILD-Option den gruppierten Index neu.If the table has a clustered index, the REBUILD option rebuilds the clustered index. REBUILD kann als ONLINE-Vorgang ausgeführt werden.REBUILD can be performed as an ONLINE operation.

Verwenden Sie die REBUILD PARTITION-Syntax, um eine einzelne Partition in einer partitionierten Tabelle neu zu erstellen.Use the REBUILD PARTITION syntax to rebuild a single partition in a partitioned table.

PARTITION = ALLPARTITION = ALL
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Erstellt alle Partitionen neu, wenn die Komprimierungseinstellungen für die Partition geändert werden.Rebuilds all partitions when changing the partition compression settings.

REBUILD WITH ( <Rebuild_option >)REBUILD WITH ( <rebuild_option> )
Alle Optionen gelten für eine Tabelle mit einem gruppierten Index.All options apply to a table with a clustered index. Wenn die Tabelle nicht über einen gruppierten Index verfügt, wird die Heapstruktur nur von einigen der Optionen beeinflusst.If the table does not have a clustered index, the heap structure is only affected by some of the options.

Wenn mit dem REBUILD-Vorgang keine bestimmte Komprimierungseinstellung angegeben wird, wird die aktuelle Komprimierungseinstellung für die Partition verwendet.When a specific compression setting is not specified with the REBUILD operation, the current compression setting for the partition is used. Um die aktuelle Einstellung zurückzugeben, Fragen den Data_compression Spalte in der sys.partitions -Katalogsicht angezeigt.To return the current setting, query the data_compression column in the sys.partitions catalog view.

Eine vollständige Beschreibung der Optionen für die Neuerstellung finden Sie unter Index_option ( Transact-SQL ) .For complete descriptions of the rebuild options, see index_option (Transact-SQL).

DATA_COMPRESSIONDATA_COMPRESSION
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt die Datenkomprimierungsoption für die angegebene Tabelle, die Partitionsnummer oder den Bereich von Partitionen an.Specifies the data compression option for the specified table, partition number, or range of partitions. Folgende Optionen stehen zur Verfügung:The options are as follows:

NONENONE
Die Tabelle oder die angegebenen Partitionen werden nicht komprimiert.Table or specified partitions are not compressed. Gilt nicht für columnstore-Tabellen.This does not apply to columnstore tables.

ROWROW
Die Tabelle oder die angegebenen Partitionen werden mit Zeilenkomprimierung komprimiert.Table or specified partitions are compressed by using row compression. Gilt nicht für columnstore-Tabellen.This does not apply to columnstore tables.

PAGEPAGE
Die Tabelle oder die angegebenen Partitionen werden mit Seitenkomprimierung komprimiert.Table or specified partitions are compressed by using page compression. Gilt nicht für columnstore-Tabellen.This does not apply to columnstore tables.

COLUMNSTORECOLUMNSTORE
Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gilt nur für columnstore-Tabellen.Applies only to columnstore tables. COLUMNSTORE gibt an, dass eine Partition, die mit der COLUMNSTORE_ARCHIVE-Option komprimiert wurde, dekomprimiert werden soll.COLUMNSTORE specifies to decompress a partition that was compressed with the COLUMNSTORE_ARCHIVE option. Nachdem die Daten wiederhergestellt wurden, sind sie weiterhin mit der columnstore-Komprimierung komprimiert, die für alle columnstore-Tabellen verwendet wird.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore tables.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gilt nur für columnstore-Tabellen. Dies sind Tabellen, die mit einem gruppierten columnstore-Index gespeichert wurden.Applies only to columnstore tables, which are tables stored with a clustered columnstore index. Durch COLUMNSTORE_ARCHIVE wird die angegebene Partition weiter in eine geringere Größe komprimiert.COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speicherbelegung und nicht auf den zusätzlichen Zeitaufwand für das Speichern und Abrufen ankommt.This can be used for archival, or for other situations that require less storage and can afford more time for storage and retrieval

Um mehrere Partitionen gleichzeitig neu zu erstellen, finden Sie unter Index_option ( Transact-SQL ) .To rebuild multiple partitions at the same time, see index_option (Transact-SQL). Wenn die Tabelle nicht über einen gruppierten Index verfügt, werden bei Änderungen an der Datenkomprimierung der Heap und die nicht gruppierten Indizes neu erstellt.If the table does not have a clustered index, changing the data compression rebuilds the heap and the nonclustered indexes. Weitere Informationen zur Komprimierung finden Sie unter Datenkomprimierung.For more information about compression, see Data Compression.

ONLINE = {ON | OFF } <wie für Single_partition_rebuild_option >ONLINE = { ON | OFF } <as applies to single_partition_rebuild_option>
Gibt an, ob eine einzelne Partition der zugrunde liegenden Tabellen und der zugeordneten Indizes für Abfragen und Datenänderungen während des Indexvorgangs verfügbar sind.Specifies whether a single partition of the underlying tables and associated indexes are available for queries and data modification during the index operation. Der Standardwert ist OFF.The default is OFF. REBUILD kann als ONLINE-Vorgang ausgeführt werden.REBUILD can be performed as an ONLINE operation.

ONON
Lang andauernde Sperren werden nicht für die Dauer des Indexvorgangs aufrechterhalten.Long-term table locks are not held for the duration of the index operation. Erfordert eine S-Sperre für die Tabelle am Anfang der Indexneuerstellung und eine Sch-M-Sperre für die Tabelle am Ende der Onlineneuerstellung des Indexes.A S-lock on the table is required in the beginning of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. Obwohl beide Sperren kurze Metadatensperren sind, muss insbesondere die Sch-M-Sperre auf den Abschluss aller blockierenden Transaktionen warten.Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. Während der Wartezeit sperrt die Sch-M-Sperre alle anderen Transaktionen, die an dieser Sperre warten, wenn sie auf die gleiche Tabelle zugreifen.During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

Hinweis

Neuerstellung von Onlineindizes kann festlegen, die Low_priority_lock_wait weiter unten in diesem Abschnitt beschriebenen Optionen.Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
Die Tabellensperren werden für die Dauer des Indexvorgangs angewendet.Table locks are applied for the duration of the index operation. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.This prevents all user access to the underlying table for the duration of the operation.

spaltensatzname XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Der Name des Spaltensatzes.Is the name of the column set. Bei einem Spaltensatz handelt es sich um eine nicht typisierte XML-Darstellung, die alle Sparsespalten einer Tabelle in einer strukturierten Ausgabe kombiniert.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Sie können einer Tabelle, die Sparsespalten enthält, keinen Spaltensatz hinzufügen.A column set cannot be added to a table that contains sparse columns. Weitere Informationen zu Spaltensätzen finden Sie unter Verwenden von Spaltensätzen.For more information about column sets, see Use Column Sets.

{ ENABLE | DISABLE } FILETABLE_NAMESPACE{ ENABLE | DISABLE } FILETABLE_NAMESPACE
Gilt für: SQL Server 2012SQL Server 2012 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Aktiviert oder deaktiviert die systemdefinierten Einschränkungen für eine FileTable.Enables or disables the system-defined constraints on a FileTable. Kann nur mit einer FileTable verwendet werden.Can only be used with a FileTable.

Legen Sie (FILETABLE_DIRECTORY = Directory_name )SET ( FILETABLE_DIRECTORY = directory_name )
Gilt für: SQL Server 2012SQL Server 2012 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

Gibt den Windows-kompatiblen FileTable-Verzeichnisnamen an.Specifies the Windows-compatible FileTable directory name. Dieser Name sollte für alle FileTable-Verzeichnisnamen in der Datenbank eindeutig sein.This name should be unique among all the FileTable directory names in the database. Bei Eindeutigkeitsvergleichen wird die Groß-/Kleinschreibung nicht beachtet, unabhängig von den SQL-Sortiereinstellungen.Uniqueness comparison is case-insensitive, regardless of SQL collation settings. Kann nur mit einer FileTable verwendet werden.Can only be used with a FileTable.

 SET (  
        REMOTE_DATA_ARCHIVE   
        {  
            = ON (  <table_stretch_options> )  
          | = OFF_WITHOUT_DATA_RECOVERY  
          ( MIGRATION_STATE = PAUSED ) | ( <table_stretch_options> [, ...n] )  
        } )  

Gilt für: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

Aktiviert oder deaktiviert die Stretch-Datenbank für eine Tabelle.Enables or disables Stretch Database for a table. Weitere Informationen finden Sie unter Stretch Database.For more info, see Stretch Database.

Aktivieren von Stretch-Datenbank für eine TabelleEnabling Stretch Database for a table

Wenn Sie Stretch für eine Tabelle durch Angabe aktivieren ON, müssen Sie auch angeben MIGRATION_STATE = OUTBOUND beginnen sofort, Migrieren von Daten oder MIGRATION_STATE = PAUSED um die Datenmigration zu verschieben.When you enable Stretch for a table by specifying ON, you also have to specify MIGRATION_STATE = OUTBOUND to begin migrating data immediately, or MIGRATION_STATE = PAUSED to postpone data migration. Der Standardwert lautet MIGRATION_STATE = OUTBOUND.The default value is MIGRATION_STATE = OUTBOUND. Weitere Informationen zum Aktivieren von Stretch für eine Tabelle finden Sie unter Aktivieren von Stretch-Datenbank für eine Tabelle.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Voraussetzungen.Prerequisites. Bevor Sie Stretch für eine Tabelle aktivieren, müssen Sie Stretch aktivieren, auf dem Server und in der Datenbank.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. Weitere Informationen finden Sie unter Enable Stretch Database for a database.For more info, see Enable Stretch Database for a database.

Berechtigungen.Permissions. Aktivieren von Stretch für eine Datenbank oder einer Tabelle erfordert Db_owner-Berechtigungen.Enabling Stretch for a database or a table requires db_owner permissions. Aktivieren von Stretch für eine Tabelle benötigen Sie außerdem ALTER-Berechtigungen für die Tabelle.Enabling Stretch for a table also requires ALTER permissions on the table.

Deaktivieren von Stretch-Datenbank für eine TabelleDisabling Stretch Database for a table

Wenn Sie Stretch für eine Tabelle deaktivieren, haben Sie zwei Optionen für die Remotedaten, die bereits zu Azure migriert wurde.When you disable Stretch for a table, you have two options for the remote data that has already been migrated to Azure. Weitere Informationen finden Sie unter Deaktivieren von Stretch Database und Zurückholen von Remotedaten.For more info, see Disable Stretch Database and bring back remote data.

  • Führen Sie den folgenden Befehl aus, um Stretch für eine Tabelle zu deaktivieren und die Remotedaten einer Tabelle aus Azure zurück zu SQL Server zu kopieren.To disable Stretch for a table and copy the remote data for the table from Azure back to SQL Server, run the following command. Dieser Befehl kann nicht abgebrochen werden.This command can't be canceled.

    ALTER TABLE \<table name>
       SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;  
    

    Dieser Vorgang verursacht Datenübertragungskosten und kann nicht abgebrochen werden.This operation incurs data transfer costs, and it can't be canceled. Weitere Informationen finden Sie unter Datenübertragungen – Preisdetails.For more info, see Data Transfers Pricing Details.

    Nachdem die Remotedaten von Azure zurück zu SQL Server kopiert wurden, wird Stretch für die Tabelle deaktiviert.After all the remote data has been copied from Azure back to SQL Server, Stretch is disabled for the table.

  • Führen Sie den folgenden Befehl aus, um Stretch für eine Tabelle zu deaktivieren und die Remotedaten zu verwerfen.To disable Stretch for a table and abandon the remote data, run the following command.

    ALTER TABLE \<table_name>
       SET ( REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED ) ) ;  
    

    Nachdem Sie Stretch Database für eine Tabelle deaktiviert haben, wird die Datenmigration beendet und die Abfrageergebnisse enthalten keine Ergebnisse aus der Remotetabelle mehr.After you disable Stretch Database for a table, data migration stops and query results no longer include results from the remote table.

    Das Deaktivieren von Stretch wird die Remotetabelle nicht entfernt werden.Disabling Stretch does not remove the remote table. Wenn Sie die Remotetabelle löschen möchten, müssen Sie sie mithilfe des Azure-Verwaltungsportals löschen.If you want to delete the remote table, you have to drop it by using the Azure management portal.

[FILTER_PREDICATE = {null | Prädikat }][ FILTER_PREDICATE = { null | predicate } ]
Gilt für: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

Gibt optional ein Filterprädikat zum Auswählen von Zeilen aus einer Tabelle zu migrieren, die Verlaufsdaten und aktuelle Daten enthält.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. Das Prädikat muss eine deterministische Inline-Tabellenwertfunktion aufrufen.The predicate must call a deterministic inline table-valued function. Weitere Informationen finden Sie unter Aktivieren von Stretch-Datenbank für eine Tabelle und auswählen zu migrierender mithilfe einer Filterfunktion ( Zeilen Stretch-Datenbank ) .For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function (Stretch Database).

Wichtig

Wenn Sie ein schwaches Filterprädikat angeben, wird die Datenmigration ebenfalls unzureichend ausgeführt.If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch-Datenbank wendet das Filterprädikat über den CROSS APPLY-Operator auf die Tabelle an.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

Wenn Sie kein Filterprädikat angeben, wird die gesamte Tabelle migriert.If you don't specify a filter predicate, the entire table is migrated.

Wenn Sie kein Filterprädikat angeben, müssen Sie auch angeben MIGRATION_STATE.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = {AUSGEHENDE | EINGEHENDE | ANGEHALTEN}MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
Gilt für: SQL Server 2017SQL Server 2017.Applies to: SQL Server 2017SQL Server 2017.

WAIT_AT_LOW_PRIORITYWAIT_AT_LOW_PRIORITY
Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Bei der Onlineindexneuerstellung muss auf blockierende Vorgänge für diese Tabelle gewartet werden.An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY gibt an, dass der Vorgang zur onlineindexneuerstellung Sperren mit niedriger Priorität, sodass andere Vorgänge, während die onlineindexerstellung wartet gewartet wird.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. Das Weglassen der WAIT AT LOW PRIORITY -Option ist gleichwertig mit WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).

MAX_DURATION = Zeit [Minuten ]MAX_DURATION = time [MINUTES ]
Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Die Wartezeit (ein Integerwert in Minuten angegeben), die die SWITCH oder Sperren der onlineindexneuerstellung mit niedriger Priorität warten, wenn den DDL-Befehl ausgeführt.The wait time (an integer value specified in minutes) that the SWITCH or online index rebuild locks will wait with low priority when executing the DDL command. Wenn der Vorgang blockiert wird die MAX_DURATION Zeit, eines der ABORT_AFTER_WAIT -Aktionen ausgeführt.If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will be executed. MAX_DURATION ist immer in Minuten, und das Wort Minuten kann ausgelassen werden.MAX_DURATION time is always in minutes, and the word MINUTES can be omitted.

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERN }]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]
Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

KeineNONE
Es wird weiterhin mit normaler (regulärer) Priorität auf die Sperre gewartet.Continue waiting for the lock with normal (regular) priority.

SELFSELF
Beenden der SWITCH oder DDL-Vorgang zur onlineindexneuerstellung derzeit ausgeführt wird, ohne eine Aktion auszuführen.Exit the SWITCH or online index rebuild DDL operation currently being executed without taking any action.

BLOCKERSBLOCKERS
Bricht alle Benutzertransaktionen, die derzeit Blockieren der SWITCH oder Onlineindex-DDL-Vorgang neu zu erstellen, damit der Vorgang fortgesetzt werden kann.Kill all user transactions that block currently the SWITCH or online index rebuild DDL operation so that the operation can continue.

Erfordert ALTER ANY CONNECTION Berechtigung.Requires ALTER ANY CONNECTION permission.

IF VORHANDEN ISTIF EXISTS
Gilt für: SQL ServerSQL Server ( SQL Server 2016SQL Server 2016 über aktuelle Version) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server ( SQL Server 2016SQL Server 2016 through current version) and Azure SQL-DatenbankAzure SQL Database.

Löscht die Spalte oder Einschränkung bedingt, nur dann, wenn sie bereits vorhanden ist.Conditionally drops the column or constraint only if it already exists.

HinweiseRemarks

Verwenden Sie zum Hinzufügen von neuer Datenzeilen einfügen.To add new rows of data, use INSERT. Verwenden Sie zum Entfernen von Datenzeilen löschen oder TRUNCATE TABLE.To remove rows of data, use DELETE or TRUNCATE TABLE. Um die Werte in vorhandenen Zeilen zu ändern, verwenden UPDATE.To change the values in existing rows, use UPDATE.

Wenn der Prozedurcache Ausführungspläne enthält, die auf die Tabelle verweisen, kennzeichnet ALTER TABLE diese für die erneute Kompilierung bei der nächsten Ausführung.If there are any execution plans in the procedure cache that reference the table, ALTER TABLE marks them to be recompiled on their next execution.

Ändern der Größe einer SpalteChanging the Size of a Column

Sie können Länge, Präzision oder Dezimalstellen einer Spalte ändern, indem Sie die neue Größe für den Spaltendatentyp in der ALTER COLUMN-Klausel angeben.You can change the length, precision, or scale of a column by specifying a new size for the column data type in the ALTER COLUMN clause. Wenn die Spalte Daten enthält, darf die neue Größe nicht unter der maximalen Datenmenge liegen.If data exists in the column, the new size cannot be smaller than the maximum size of the data. Die Spalte kann nicht auch in einem Index definiert werden, es sei denn, die Spalte ist eine Varchar, Nvarchar, oder Varbinary -Datentyp und der Index ist nicht das Ergebnis eines PRIMÄRSCHLÜSSELS Einschränkung.Also, the column cannot be defined in an index, unless the column is a varchar, nvarchar, or varbinary data type and the index is not the result of a PRIMARY KEY constraint. Siehe Beispiel P.See example P.

Sperren und ALTER TABLELocks and ALTER TABLE

Die in ALTER TABLE angegebenen Änderungen werden sofort implementiert.The changes specified in ALTER TABLE are implemented immediately. Wenn die Änderungen Änderungen der Zeilen in der Tabelle erfordern, aktualisiert ALTER TABLE die Zeilen.If the changes require modifications of the rows in the table, ALTER TABLE updates the rows. ALTER TABLE belegt die Tabelle mit einer Schemaänderungssperre (SCH-M), um sicherzustellen, dass andere Verbindungen während der Änderung noch nicht einmal auf die Metadaten der Tabelle verweisen können. Eine Ausnahme sind Onlineindexvorgänge, die am Ende eine sehr kurze SCH-M-Sperre erfordern.ALTER TABLE acquires a schema modify (SCH-M) lock on the table to make sure that no other connections reference even the metadata for the table during the change, except online index operations that require a very short SCH-M lock at the end. Bei einem ALTER TABLE…SWITCH-Vorgang werden sowohl die Quell- als auch die Zieltabelle mit der Sperre belegt.In an ALTER TABLE…SWITCH operation, the lock is acquired on both the source and target tables. Die an der Tabelle vorgenommenen Änderungen werden protokolliert und sind vollständig wiederherstellbar.The modifications made to the table are logged and fully recoverable. Änderungen, die sich auf sämtliche Zeilen einer sehr großen Tabelle auswirken (z. B. das Löschen einer Spalte oder in einigen Editionen von SQL ServerSQL Server das Hinzufügen einer NOT NULL-Spalte mit einem Standardwert) kann viel Zeit in Anspruch nehmen und dazu führen, dass viele Protokolldatensätze generiert werden.Changes that affect all the rows in very large tables, such as dropping a column or, on some editions of SQL ServerSQL Server, adding a NOT NULL column with a default value, can take a long time to complete and generate many log records. Diese ALTER TABLE-Anweisungen sollten ebenso vorsichtig ausgeführt werden wie jede INSERT-, UPDATE- oder DELETE-Anweisung, die sich auf viele Zeilen auswirkt.These ALTER TABLE statements should be executed with the same care as any INSERT, UPDATE, or DELETE statement that affects many rows.

Hinzufügen von NOT NULL-Spalten als OnlinevorgangAdding NOT NULL Columns as an Online Operation

Beginnend mit SQL Server 2012SQL Server 2012 Enterprise Edition ist das Hinzufügen eine NOT NULL-Spalte hat den Standardwert ist ein Onlinevorgang, wenn der Standardwert ist eine laufzeitkonstante.Starting with SQL Server 2012SQL Server 2012 Enterprise Edition, adding a NOT NULL column with a default value is an online operation when the default value is a runtime constant. Dies bedeutet, dass der Vorgang unabhängig von der Anzahl von Zeilen in der Tabelle nahezu sofort abgeschlossen wird.This means that the operation is completed almost instantaneously regardless of the number of rows in the table. Dies liegt daran, dass die vorhandenen Zeilen in der Tabelle während des Vorgangs nicht aktualisiert werden. Stattdessen wird der Standardwert nur in den Metadaten der Tabelle gespeichert und der Wert in Abfragen, die auf diese Zeilen zugreifen, nur nach Bedarf gesucht.This is because the existing rows in the table are not updated during the operation; instead, the default value is stored only in the metadata of the table and the value is looked up as needed in queries that access these rows. Dieses Verhalten ist automatisch. Es ist keine zusätzliche Syntax erforderlich, um den Onlinevorgang außerhalb der ADD COLUMN-Syntax zu implementieren.This behavior is automatic; no additional syntax is required to implement the online operation beyond the ADD COLUMN syntax. Eine Laufzeitkonstante ist ein Ausdruck, der zur Laufzeit unabhängig vom Determinismus den gleichen Wert für jede Zeile in der Tabelle erzeugt.A runtime constant is an expression that produces the same value at runtime for each row in the table regardless of its determinism. Der konstante Ausdruck "My temporary data" oder die GETUTCDATETIME()-Systemfunktion sind z. B. Laufzeitkonstanten.For example, the constant expression "My temporary data", or the system function GETUTCDATETIME() are runtime constants. Im Gegensatz dazu sind die Funktionen NEWID() oder NEWSEQUENTIALID() keine Laufzeitkonstanten, da für jede Zeile in der Tabelle ein eindeutiger Wert erzeugt wird.In contrast, the functions NEWID() or NEWSEQUENTIALID() are not runtime constants because a unique value is produced for each row in the table. Das Hinzufügen einer NOT NULL-Spalte mit einem Standardwert, der keine Laufzeitkonstante ist, wird immer offline ausgeführt, und dabei wird eine exklusive (SCH-M)-Sperre für die Dauer des Vorgangs abgerufen.Adding a NOT NULL column with a default value that is not a runtime constant is always performed offline and an exclusive (SCH-M) lock is acquired for the duration of the operation.

Während die vorhandenen Zeilen auf den in Metadaten gespeicherten Wert verweisen, wird der Standardwert für alle neu eingefügten Zeilen in der Zeile gespeichert, ohne einen anderen Wert für die Spalte anzugeben.While the existing rows reference the value stored in metadata, the default value is stored on the row for any new rows that are inserted and do not specify another value for the column. Der in Metadaten gespeicherte Standardwert wird in eine vorhandene Zeile verschoben, wenn die Zeile aktualisiert wird (auch wenn die tatsächliche Spalte nicht in der UPDATE-Anweisung angegeben wird) oder wenn die Tabelle oder der gruppierte Index neu erstellt wird.The default value stored in metadata is moved to an existing row when the row is updated (even if the actual column is not specified in the UPDATE statement), or if the table or clustered index is rebuilt.

Spalten vom Typ varchar(max), nvarchar(max), varbinary(max), Xml, Text, Ntext, Image, Hierarchyid, Geometrie, Geography, noch können Sie CLR-UDTS in einem Onlinevorgang hinzugefügt werden.Columns of type varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography, or CLR UDTS, cannot be added in an online operation. Eine Spalte kann nicht online hinzugefügt werden, wenn dies dazu führt, dass die maximal mögliche Zeilengröße den Grenzwert von 8.060 Bytes überschreitet.A column cannot be added online if doing so causes the maximum possible row size to exceed the 8,060 byte limit. Die Spalte wird in diesem Fall als Offlinevorgang hinzugefügt.The column is added as an offline operation in this case.

Ausführung paralleler PläneParallel Plan Execution

In Microsoft SQL Server 2012 EnterpriseMicrosoft SQL Server 2012 Enterprise und höher wird die Anzahl der Prozessoren zum Ausführen einer einzelnen ALTER TABLE ADD (Index basiert) Einschränkung oder DROP (gruppierter Index) CONSTRAINT Anweisung richtet sich nach der Max. Grad an Parallelität Konfiguration Option und die aktuelle Arbeitslast.In Microsoft SQL Server 2012 EnterpriseMicrosoft SQL Server 2012 Enterprise and higher, the number of processors employed to run a single ALTER TABLE ADD (index based) CONSTRAINT or DROP (clustered index) CONSTRAINT statement is determined by the max degree of parallelism configuration option and the current workload. Wenn das DatenbankmodulDatabase Engine erkennt, dass das System ausgelastet ist, wird der Grad an Parallelität für den Vorgang automatisch reduziert, bevor mit der Ausführung der Anweisung begonnen wird.If the DatenbankmodulDatabase Engine detects that the system is busy, the degree of parallelism of the operation is automatically reduced before statement execution starts. Sie können die Anzahl der Prozessoren, die zur Ausführung der Anweisung verwendet werden, durch Angeben der MAXDOP-Option manuell konfigurieren.You can manually configure the number of processors that are used to run the statement by specifying the MAXDOP option. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität.For more information, see Configure the max degree of parallelism Server Configuration Option.

Partitionierte TabellenPartitioned Tables

Neben dem Ausführen von SWITCH-Vorgängen mit partitionierten Tabellen können mit ALTER TABLE der Status der Spalten, Einschränkungen und Trigger einer partitionierten Tabelle genau wie bei nicht partitionierten Tabellen geändert werden.In addition to performing SWITCH operations that involve partitioned tables, ALTER TABLE can be used to change the state of the columns, constraints, and triggers of a partitioned table just like it is used for nonpartitioned tables. Die Partitionierung der Tabelle selbst kann jedoch mit der Anweisung nicht geändert werden.However, this statement cannot be used to change the way the table itself is partitioned. Verwenden Sie zum Neupartitionieren einer partitionierten Tabelle ALTER PARTITION SCHEME und ALTER PARTITION FUNCTION.To repartition a partitioned table, use ALTER PARTITION SCHEME and ALTER PARTITION FUNCTION. Zudem können Sie den Datentyp einer Spalte einer partitionierten Tabelle nicht ändern.Additionally, you cannot change the data type of a column of a partitioned table.

Einschränkungen für Tabellen mit schemagebundenen SichtenRestrictions on Tables with Schema-Bound Views

Die Einschränkungen, die für ALTER TABLE-Anweisungen für Tabellen mit schemagebundenen Sichten gelten, sind dieselben, die derzeit beim Ändern von Tabellen mit einem einfachen Index angewendet werden.The restrictions that apply to ALTER TABLE statements on tables with schema-bound views are the same as the restrictions currently applied when modifying tables with a simple index. Das Hinzufügen einer Spalte ist zulässig.Adding a column is allowed. Das Entfernen oder Ändern einer Spalte, die Bestandteil einer schemagebundenen Sicht ist, ist dagegen nicht zulässig.However, removing or changing a column that participates in any schema-bound view is not allowed. Wenn für die ALTER TABLE-Anweisung das Ändern einer in einer schemagebundenen Sicht verwendeten Spalte erforderlich ist, schlägt ALTER TABLE fehl, und das DatenbankmodulDatabase Engine löst eine Fehlermeldung aus.If the ALTER TABLE statement requires changing a column used in a schema-bound view, ALTER TABLE fails and the DatenbankmodulDatabase Engine raises an error message. Weitere Informationen zu schemabindung und indizierten Sichten, finden Sie unter CREATE VIEW ( Transact-SQL ) .For more information about schema binding and indexed views, see CREATE VIEW (Transact-SQL).

Das Hinzufügen oder Entfernen von Triggern für Basistabellen wird durch das Erstellen einer schemagebundenen Sicht, die auf die Tabellen verweist, nicht beeinflusst.Adding or removing triggers on base tables is not affected by creating a schema-bound view that references the tables.

Indizes und ALTER TABLEIndexes and ALTER TABLE

Als Teil einer Einschränkung erstellte Indizes werden gelöscht, wenn die Einschränkung gelöscht wird.Indexes created as part of a constraint are dropped when the constraint is dropped. Mit CREATE INDEX erstellte Indizes müssen mit DROP INDEX gelöscht werden.Indexes that were created with CREATE INDEX must be dropped with DROP INDEX. Die ALTER INDEX-Anweisung kann verwendet werden, um einen Index neu zu erstellen, der Teil einer Einschränkungsdefinition ist. Die Einschränkung muss nicht gelöscht und mit ALTER TABLE erneut hinzugefügt werden.The ALTER INDEX statement can be used to rebuild an index part of a constraint definition; the constraint does not have to be dropped and added again with ALTER TABLE.

Alle auf einer Spalte basierenden Indizes und Einschränkungen müssen entfernt werden, bevor die Spalte entfernt werden kann.All indexes and constraints based on a column must be removed before the column can be removed.

Wenn eine Einschränkung, für die ein gruppierter Index erstellt wurde, gelöscht wird, werden die Datenzeilen, die auf der Blattebene des gruppierten Indexes gespeichert waren, in einer nicht gruppierten Tabelle gespeichert.When a constraint that created a clustered index is deleted, the data rows that were stored in the leaf level of the clustered index are stored in a nonclustered table. Sie können den gruppierten Index löschen und die daraus resultierende Tabelle in einer einzigen Transaktion in eine andere Dateigruppe oder in ein anderes Partitionsschema verschieben, indem Sie die MOVE TO-Option angeben.You can drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option. Die MOVE TO-Option weist die folgenden Einschränkungen auf:The MOVE TO option has the following restrictions:

  • MOVE TO ist für indizierte Sichten oder nicht gruppierte Indizes nicht gültig.MOVE TO is not valid for indexed views or nonclustered indexes.

  • Das Partitionsschema oder die Dateigruppe muss bereits vorhanden sein.The partition scheme or filegroup must already exist.

  • Wird MOVE TO nicht angegeben, wird die Tabelle in demselben Partitionsschema oder derselben Dateigruppe platziert, das bzw. die für den gruppierten Index definiert war.If MOVE TO is not specified, the table will be located in the same partition scheme or filegroup as was defined for the clustered index.

Wenn Sie einen gruppierten Index löschen, können Sie angeben, dass ONLINE = Option, damit die DROP INDEX-Transaktion Abfragen und Änderungen an den zugrunde liegenden Daten und die zugehörigen nicht gruppierten Indizes nicht blockiert.When you drop a clustered index, you can specify ONLINE = ON option so the DROP INDEX transaction does not block queries and modifications to the underlying data and associated nonclustered indexes.

ONLINE = ON gelten folgenden Einschränkungen:ONLINE = ON has the following restrictions:

  • ONLINE = ON ist nicht gültig für gruppierte Indizes, die auch deaktiviert werden.ONLINE = ON is not valid for clustered indexes that are also disabled. Deaktivierte Indizes müssen mit ONLINE gelöscht werden = OFF.Disabled indexes must be dropped by using ONLINE = OFF.

  • Es können nicht mehrere Indizes gleichzeitig gelöscht werden.Only one index at a time can be dropped.

  • ONLINE = ON ist nicht gültig für indizierte Sichten, nicht gruppierte Indizes oder Indizes für lokale temporäre Tabellen.ONLINE = ON is not valid for indexed views, nonclustered indexes or indexes on local temp tables.

  • ONLINE = ON ist nicht gültig für columnstore-Indizes.ONLINE = ON is not valid for columnstore indexes.

Zum Löschen eines gruppierten Indexes ist temporärer Speicherplatz im Umfang des vorhandenen gruppierten Indexes erforderlich.Temporary disk space equal to the size of the existing clustered index is required to drop a clustered index. Dieser zusätzliche Speicherplatz wird nach Abschluss des Vorgangs freigegeben.This additional space is released as soon as the operation is completed.

Hinweis

Die unter aufgeführten Optionen <Drop_clustered_constraint_option > gelten für gruppierte Indizes für Tabellen und nicht auf gruppierte Indizes für Sichten oder nicht gruppierte Indizes angewendet werden.The options listed under <drop_clustered_constraint_option> apply to clustered indexes on tables and cannot be applied to clustered indexes on views or nonclustered indexes.

Replizieren von SchemaänderungenReplicating Schema Changes

Wenn Sie ALTER TABLE für eine veröffentlichte Tabelle auf einem SQL ServerSQL Server-Verleger ausführen, wird diese Änderung standardmäßig an alle SQL ServerSQL Server-Abonnenten weitergegeben.By default, when you run ALTER TABLE on a published table at a SQL ServerSQL Server Publisher, that change is propagated to all SQL ServerSQL Server Subscribers. Für diese Funktionalität bestehen einige Einschränkungen, und sie kann deaktiviert werden.This functionality has some restrictions and can be disabled. Weitere Informationen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken.For more information, see Make Schema Changes on Publication Databases.

DatenkomprimierungData Compression

Für Systemtabellen ist die Komprimierung nicht verfügbar.System tables cannot be enabled for compression. Wenn die Tabelle ein Heap ist, erfolgt der Neuerstellungsvorgang für den ONLINE-Modus mit einem einzelnen Thread.If the table is a heap, the rebuild operation for ONLINE mode will be single threaded. Verwenden Sie den OFFLINE-Modus für einen Multithreaded-Neuerstellungsvorgang von Heaps.Use OFFLINE mode for a multi-threaded heap rebuild operation. Weitere Informationen zur datenkomprimierung finden Sie unterDatenkomprimierung.For a more information about data compression, seeData Compression.

Mit der gespeicherten Prozedur sp_estimate_data_compression_savings können Sie einschätzen, wie sich eine Änderung des Komprimierungsstatus auf eine Tabelle, einen Index oder eine Partition auswirkt.To evaluate how changing the compression state will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

Für partitionierte Tabellen gelten die folgenden Einschränkungen:The following restrictions apply to partitioned tables:

  • Sie können die Komprimierungseinstellung einer einzelnen Partition nicht ändern, wenn die Tabelle nicht ausgerichtete Indizes aufweist.You cannot change the compression setting of a single partition if the table has nonaligned indexes.

  • Die Syntax ALTER TABLE <Tabelle > REBUILD PARTITION...-Syntax wird die angegebene Partition.The ALTER TABLE <table> REBUILD PARTITION ... syntax rebuilds the specified partition.

  • Die Syntax ALTER TABLE <Tabelle > REBUILD WITH...-Syntax werden alle Partitionen neu erstellt..The ALTER TABLE <table> REBUILD WITH ... syntax rebuilds all partitions.

Löschen von NTEXT-SpaltenDropping NTEXT Columns

Wenn NTEXT-Spalten gelöscht werden, wird das Cleanup der gelöschten Daten als serialisierter Vorgang für alle Zeilen durchgeführt.When dropping NTEXT columns, the cleanup of the deleted data occurs as a serialized operation on all rows. Das kann einige Zeit dauern.This can require a substantial time. Wenn Sie eine NTEXT-Spalte in einer Tabelle mit einer großen Zeilenanzahl löschen, aktualisieren Sie die NTEXT-Spalte zunächst auf den Wert NULL und löschen dann die Spalte.When dropping an NTEXT column in a table with a large number rows, update the NTEXT column to NULL value first, then drop the column. Dieses Verfahren kann mit parallelen Vorgängen ausgeführt werden und kostet deutlich weniger Zeit.This can be performed with parallel operations and can be much faster.

Onlineneuerstellung von IndizesOnline Index Rebuild

Um die DDL-Anweisung für eine Onlineindexneuerstellung auszuführen, müssen alle aktiven blockierenden Transaktionen, die für eine bestimmte Tabelle ausgeführt werden, abgeschlossen sein.In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Wenn die Onlineindexneuerstellung ausgeführt wird, werden alle neuen Transaktionen, die zur Ausführung in dieser Tabelle bereit sind, blockiert.When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. Obwohl die Sperre für die Onlineindexneuerstellung nur kurz dauert, kann das Warten auf den Abschluss aller noch offenen Transaktionen und das Blockieren aller neuen, zu startenden Transaktionen für eine bestimmte Tabelle den Durchsatz beeinträchtigen, eine Verlangsamung oder einen Ausfall der Arbeitsauslastung verursachen und den Zugriff auf die zugrunde liegende Tabelle deutlich einschränken.Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. Die WAIT_AT_LOW_PRIORITY -Option können Datenbankadministratoren zum Verwalten der s- und Sch-M-Sperren muss für die onlineneuerstellung von Indizes und zum Auswählen eines 3-Optionen angegeben.The WAIT_AT_LOW_PRIORITY option allows DBA's to manage the S-lock and Sch-M locks required for online index rebuilds and allows them to select one of 3 options. In allen drei Fällen gilt: Wenn während der Wartezeit ( (MAX_DURATION =n [minutes]) ) keine blockierenden Aktivitäten vorhanden sind, wird die Onlineindexneuerstellung ohne Wartezeit sofort ausgeführt, und die DDL-Anweisung wird abgeschlossen.In all 3 cases, if during the wait time ( (MAX_DURATION =n [minutes]) ) there are no blocking activities, the online index rebuild is executed immediately without waiting and the DDL statement is completed.

KompatibilitätsunterstützungCompatibility Support

Die ALTER TABLE-Anweisung lässt nur zweiteilige Tabellennamen (schema.object) zu.The ALTER TABLE statement allows only two-part (schema.object) table names. In SQL Server 2017SQL Server 2017 schlägt die Angabe eines Tabellennamens mit den folgenden Formaten zur Kompilierzeit mit Fehler 117 fehl.In SQL Server 2017SQL Server 2017, specifying a table name using the following formats fails at compile time with error 117.

  • server.database.schema.tableserver.database.schema.table

  • .database.schema.table.database.schema.table

  • ..schema.table..schema.table

Bei früheren Versionen wurde durch die Angabe des Formats "server.database.schema.table" der Fehler 4902 zurückgegeben.In earlier versions specifying the format server.database.schema.table returned error 4902. Die Angabe des Formats ".database.schema.table" oder "..schema.table" war erfolgreich.Specifying the format .database.schema.table or the format ..schema.table succeeded.

Um das Problem zu beheben, vermeiden Sie die Verwendung eines vierteiligen Präfixes.To resolve the problem, remove the use of a 4-part prefix.

BerechtigungenPermissions

Erfordert die ALTER-Berechtigung für die Tabelle.Requires ALTER permission on the table.

ALTER TABLE-Berechtigungen gelten für beide an einer ALTER TABLE SWITCH-Anweisung beteiligten Tabellen.ALTER TABLE permissions apply to both tables involved in an ALTER TABLE SWITCH statement. Alle verschobenen Daten erben die Sicherheitseinstellungen der Zieltabelle.Any data that is switched inherits the security of the target table.

Falls Spalten in der ALTER TABLE-Anweisung mit einem benutzerdefinierten CLR-Typ (Common Language Runtime) oder Aliasdatentyp definiert sind, ist die REFERENCES-Berechtigung für den Typ erforderlich.If any columns in the ALTER TABLE statement are defined to be of a common language runtime (CLR) user-defined type or alias data type, REFERENCES permission on the type is required.

Hinzufügen einer Spalte, die die Zeilen der Tabelle aktualisiert erfordert UPDATE Berechtigung für die Tabelle.Adding a column that updates the rows of the table requires UPDATE permission on the table. Z. B. Hinzufügen einer NOT NULL Spalte mit einem Standardwert oder das Hinzufügen einer Identitätsspalte aus, wenn die Tabelle nicht leer ist.For example, adding a NOT NULL column with a default value or adding an identity column when the table is not empty.

BeispieleExamples

KategorieCategory FunktionssyntaxelementeFeatured syntax elements
Hinzufügen von Spalten und EinschränkungenAdding columns and constraints ADD • PRIMARY KEY mit Indexoptionen • Sparsespalten und Spaltensätze •ADD • PRIMARY KEY with index options • sparse columns and column sets •
Löschen von Spalten und EinschränkungenDropping columns and constraints DROPDROP
Ändern einer SpaltendefinitionAltering a column definition Ändern des Datentyps • Ändern der Spaltengröße • Sortierungchange data type • change column size • collation
Ändern einer Tabelle (Definition)Altering a table definition DATA_COMPRESSION • SWITCH PARTITION • LOCK ESCALATION • ÄnderungsnachverfolgungDATA_COMPRESSION • SWITCH PARTITION • LOCK ESCALATION • change tracking
Deaktivieren und Aktivieren von Einschränkungen und TriggerDisabling and enabling constraints and triggers CHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGERCHECK • NO CHECK • ENABLE TRIGGER • DISABLE TRIGGER

Hinzufügen von Spalten und EinschränkungenAdding Columns and Constraints

Die Beispiele in diesem Abschnitt veranschaulichen das Hinzufügen von Spalten und Einschränkungen zu einer Tabelle.Examples in this section demonstrate adding columns and constraints to a table.

A.A. Hinzufügen einer neuen SpalteAdding a new column

Im folgenden Beispiel wird eine Spalte hinzugefügt, die NULL-Werte zulässt und für die keine Werte durch eine DEFAULT-Definition bereitgestellt werden.The following example adds a column that allows null values and has no values provided through a DEFAULT definition. Jede Zeile in der neuen Spalte erhält einen NULL-Wert.In the new column, each row will have NULL.

CREATE TABLE dbo.doc_exa (column_a INT) ;  
GO  
ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ;  
GO  

B.B. Hinzufügen einer Spalte mit einer EinschränkungAdding a column with a constraint

Im folgenden Beispiel wird eine neue Spalte mit einer UNIQUE-Einschränkung hinzugefügt.The following example adds a new column with a UNIQUE constraint.

CREATE TABLE dbo.doc_exc (column_a INT) ;  
GO  
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL   
    CONSTRAINT exb_unique UNIQUE ;  
GO  
EXEC sp_help doc_exc ;  
GO  
DROP TABLE dbo.doc_exc ;  
GO  

C.C. Hinzufügen einer nicht überprüften CHECK-Einschränkung zu einer vorhandenen SpalteAdding an unverified CHECK constraint to an existing column

Im folgenden Beispiel wird einer vorhandenen Spalte in der Tabelle eine Einschränkung hinzugefügt.The following example adds a constraint to an existing column in the table. Die Spalte hat einen Wert, der die Einschränkung verletzt.The column has a value that violates the constraint. Deshalb wird WITH NOCHECK verwendet, um zu verhindern, dass die Einschränkung für vorhandene Zeilen überprüft wird, und um das Hinzufügen der Einschränkung zu ermöglichen.Therefore, WITH NOCHECK is used to prevent the constraint from being validated against existing rows, and to allow for the constraint to be added.

CREATE TABLE dbo.doc_exd ( column_a INT) ;  
GO  
INSERT INTO dbo.doc_exd VALUES (-1) ;  
GO  
ALTER TABLE dbo.doc_exd WITH NOCHECK   
ADD CONSTRAINT exd_check CHECK (column_a > 1) ;  
GO  
EXEC sp_help doc_exd ;  
GO  
DROP TABLE dbo.doc_exd ;  
GO  

D.D. Hinzufügen einer DEFAULT-Einschränkung zu einer vorhandenen SpalteAdding a DEFAULT constraint to an existing column

Im folgenden Beispiel wird eine Tabelle mit zwei Spalten erstellt und ein Wert in die erste Spalte eingefügt, während die andere Spalte NULL bleibt.The following example creates a table with two columns and inserts a value into the first column, and the other column remains NULL. Anschließend wird der zweiten Spalte eine DEFAULT-Einschränkung hinzugefügt.A DEFAULT constraint is then added to the second column. Um zu überprüfen, ob der Standardwert angewendet wird, wird ein weiterer Wert in die erste Spalte eingefügt und die Tabelle abgefragt.To verify that the default is applied, another value is inserted into the first column, and the table is queried.

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ;  
GO  
INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ;  
GO  
ALTER TABLE dbo.doc_exz  
ADD CONSTRAINT col_b_def  
DEFAULT 50 FOR column_b ;  
GO  
INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ;  
GO  
SELECT * FROM dbo.doc_exz ;  
GO  
DROP TABLE dbo.doc_exz ;  
GO  

E.E. Hinzufügen mehrerer Spalten mit EinschränkungenAdding several columns with constraints

Im folgenden Beispiel werden mehrere Spalten mit Einschränkungen hinzugefügt, die mit der neuen Spalte definiert werden.The following example adds several columns with constraints defined with the new column. Die erste neue Spalte weist eine IDENTITY-Eigenschaft auf.The first new column has an IDENTITY property. Jede Zeile in der Tabelle besitzt neue inkrementelle Werte in der Identitätsspalte.Each row in the table has new incremental values in the identity column.

CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ;  
GO  
ALTER TABLE dbo.doc_exe ADD   

-- Add a PRIMARY KEY identity column.  
column_b INT IDENTITY  
CONSTRAINT column_b_pk PRIMARY KEY,   

-- Add a column that references another column in the same table.  
column_c INT NULL    
CONSTRAINT column_c_fk   
REFERENCES doc_exe(column_a),  

-- Add a column with a constraint to enforce that   
-- nonnull data is in a valid telephone number format.  
column_d VARCHAR(16) NULL   
CONSTRAINT column_d_chk  
CHECK   
(column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR  
column_d LIKE  
'([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),  

-- Add a nonnull column with a default.  
column_e DECIMAL(3,3)  
CONSTRAINT column_e_default  
DEFAULT .081 ;  
GO  
EXEC sp_help doc_exe ;  
GO  
DROP TABLE dbo.doc_exe ;  
GO  

F.F. Hinzufügen einer Spalte, die NULL-Werte zulässt, mit StandardwertenAdding a nullable column with default values

Im folgenden Beispiel wird eine Spalte, die NULL-Werte zulässt, mit einer DEFAULT-Definition hinzugefügt und WITH VALUES verwendet, um Werte für jede vorhandene Zeile in der Tabelle bereitzustellen.The following example adds a nullable column with a DEFAULT definition, and uses WITH VALUES to provide values for each existing row in the table. Ohne WITH VALUES hat jede Zeile in der neuen Spalte den Wert NULL.If WITH VALUES is not used, each row has the value NULL in the new column.


CREATE TABLE dbo.doc_exf ( column_a INT) ;  
GO  
INSERT INTO dbo.doc_exf VALUES (1) ;  
GO  
ALTER TABLE dbo.doc_exf   
ADD AddDate smalldatetime NULL  
CONSTRAINT AddDateDflt  
DEFAULT GETDATE() WITH VALUES ;  
GO  
DROP TABLE dbo.doc_exf ;  
GO  

G.G. Erstellen einer PRIMARY KEY-Einschränkung mit IndexoptionenCreating a PRIMARY KEY constraint with index options

Im folgenden Beispiel wird die PRIMARY KEY-Einschränkung PK_TransactionHistoryArchive_TransactionID erstellt, und es werden die Optionen FILLFACTOR, ONLINE und PAD_INDEX festgelegt.The following example creates the PRIMARY KEY constraint PK_TransactionHistoryArchive_TransactionID and sets the options FILLFACTOR, ONLINE, and PAD_INDEX. Der entstehende gruppierte Index hat denselben Namen wie die Einschränkung.The resulting clustered index will have the same name as the constraint.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

USE AdventureWorks2012;  
GO  
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK   
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)  
WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);  
GO  

H.H. Hinzufügen einer SparsespalteAdding a sparse column

In den folgenden Beispielen wird gezeigt, wie Sparsespalten der Tabelle T1 hinzugefügt und geändert werden.The following examples show adding and modifying sparse columns in table T1. Der Code zum Erstellen der Tabelle T1 lautet wie folgt.The code to create table T1 is as follows.

CREATE TABLE T1  
(C1 int PRIMARY KEY,  
C2 varchar(50) SPARSE NULL,  
C3 int SPARSE NULL,  
C4 int ) ;  
GO  

Um eine zusätzliche Sparsespalte C5 hinzuzufügen, führen Sie die folgende Anweisung aus.To add an additional sparse column C5, execute the following statement.

ALTER TABLE T1  
ADD C5 char(100) SPARSE NULL ;  
GO  

Um die Nicht-Sparsespalte C4 in eine Sparsespalte umzuwandeln, führen Sie die folgende Anweisung aus.To convert the C4 non-sparse column to a sparse column, execute the following statement.

ALTER TABLE T1  
ALTER COLUMN C4 ADD SPARSE ;  
GO  

Konvertiert die C4 Spalte mit geringer Dichte, eine Spalte ohne geringe Dichte, die folgende Anweisung ausführen.To convert the C4 sparse column to a nonsparse column, execute the following statement.

ALTER TABLE T1  
ALTER COLUMN C4 DROP SPARSE;  
GO  

I.I. Hinzufügen eines SpaltensatzesAdding a column set

In den folgenden Beispielen wird veranschaulicht, wie eine Spalte der Tabelle T2 hinzugefügt wird.The following examples show adding a column to table T2. Sie können einer Tabelle, die bereits Sparsespalten enthält, keinen Spaltensatz hinzufügen.A column set cannot be added to a table that already contains sparse columns. Der Code zum Erstellen der Tabelle T2 lautet wie folgt.The code to create table T2 is as follows.

CREATE TABLE T2  
(C1 int PRIMARY KEY,  
C2 varchar(50) NULL,  
C3 int NULL,  
C4 int ) ;  
GO  

Durch die folgenden drei Anweisungen werden der Spaltensatz CS hinzugefügt und dann die Spalten C2 und C3 in SPARSE geändert.The following three statements add a column set named CS, and then modify columns C2 and C3 to SPARSE.

ALTER TABLE T2  
ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ;  
GO  

ALTER TABLE T2  
ALTER COLUMN C2 ADD SPARSE ;   
GO  

ALTER TABLE T2  
ALTER COLUMN C3 ADD SPARSE ;  
GO  

J.J. Eine verschlüsselte Spalte hinzufügenAdding an encrypted column

Die folgende Anweisung fügt eine verschlüsselte Spalte mit dem Namen PromotionCode.The following statement adds an encrypted column named PromotionCode.

ALTER TABLE Customers ADD  
    PromotionCode nvarchar(100)   
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
    ENCRYPTION_TYPE = RANDOMIZED,  
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') ;  

Löschen von Spalten und EinschränkungenDropping Columns and Constraints

In den Beispielen in diesem Abschnitt wird das Löschen von Spalten und Einschränkungen veranschaulicht.The examples in this section demonstrate dropping columns and constraints.

A.A. Löschen einer oder mehrerer SpaltenDropping a column or columns

Im ersten Beispiel wird eine Tabelle durch Entfernen einer Spalte geändert.The first example modifies a table to remove a column. Im zweiten Beispiel werden mehrere Spalten entfernt.The second example removes multiple columns.

CREATE TABLE dbo.doc_exb   
    (column_a INT  
     ,column_b VARCHAR(20) NULL  
     ,column_c datetime  
     ,column_d int) ;  
GO  
-- Remove a single column.  
ALTER TABLE dbo.doc_exb DROP COLUMN column_b ;  
GO  
-- Remove multiple columns.  
ALTER TABLE dbo.doc_exb DROP COLUMN column_c, column_d;  

B.B. Löschen von Einschränkungen und SpaltenDropping constraints and columns

Im ersten Beispiel wird eine UNIQUE-Einschränkung aus einer Tabelle entfernt.The first example removes a UNIQUE constraint from a table. Im zweiten Beispiel werden zwei Einschränkungen und eine einzelne Spalte entfernt.The second example removes two constraints and a single column.

CREATE TABLE dbo.doc_exc ( column_a int NOT NULL CONSTRAINT my_constraint UNIQUE) ;  
GO  

-- Example 1. Remove a single constraint.  
ALTER TABLE dbo.doc_exc DROP my_constraint ;  
GO  

DROP TABLE dbo.doc_exc;  
GO  

CREATE TABLE dbo.doc_exc ( column_a int    
                          NOT NULL CONSTRAINT my_constraint UNIQUE  
                          ,column_b int   
                          NOT NULL CONSTRAINT my_pk_constraint PRIMARY KEY) ;  
GO  

-- Example 2. Remove two constraints and one column  
-- The keyword CONSTRAINT is optional. The keyword COLUMN is required.  
ALTER TABLE dbo.doc_exc   

    DROP CONSTRAINT CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b ;  
GO  

C.C. Löschen einer PRIMARY KEY-Einschränkung im ONLINE-ModusDropping a PRIMARY KEY constraint in the ONLINE mode

Im folgenden Beispiel wird eine PRIMARY KEY-Einschränkung gelöscht, wobei die ONLINE-Option auf ON festgelegt wird.The following example deletes a PRIMARY KEY constraint with the ONLINE option set to ON.


ALTER TABLE Production.TransactionHistoryArchive  
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID  
WITH (ONLINE = ON);  
GO  

D.D. Hinzufügen und Löschen einer FOREIGN KEY-EinschränkungAdding and dropping a FOREIGN KEY constraint

Im folgenden Beispiel wird die ContactBackup-Tabelle erstellt und dann geändert, indem zuerst eine FOREIGN KEY-Einschränkung hinzugefügt wird, die auf die Person.Person-Tabelle verweist, und dann die FOREIGN KEY-Einschränkung gelöscht wird.The following example creates the table ContactBackup, and then alters the table, first by adding a FOREIGN KEY constraint that references the table Person.Person, then by dropping the FOREIGN KEY constraint.

CREATE TABLE Person.ContactBackup  
    (ContactID int) ;  
GO  

ALTER TABLE Person.ContactBackup  
ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID)  
    REFERENCES Person.Person (BusinessEntityID) ;  
GO  

ALTER TABLE Person.ContactBackup  
DROP CONSTRAINT FK_ContactBacup_Contact ;  
GO  

DROP TABLE Person.ContactBackup ;  

Pfeilsymbol mit Back Link zum Anfang verwendet BeispieleArrow icon used with Back to Top link Examples

Ändern einer SpaltendefinitionAltering a Column Definition

A.A. Ändern des Datentyps einer SpalteChanging the data type of a column

Im folgenden Beispiel wird eine Spalte einer Tabelle von INT in DECIMAL geändert.The following example changes a column of a table from INT to DECIMAL.

CREATE TABLE dbo.doc_exy (column_a INT ) ;  
GO  
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;  
GO  
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ;  
GO  
DROP TABLE dbo.doc_exy ;  
GO  

B.B. Ändern der Größe einer SpalteChanging the size of a column

Im folgenden Beispiel wird die Größe des eine Varchar Spalte und die Genauigkeit und Skalierung einer decimal Spalte.The following example increases the size of a varchar column and the precision and scale of a decimal column. Da die Spalten Daten enthalten, kann die Spaltengröße nur erhöht werden.Because the columns contain data, the column size can only be increased. Beachten Sie auch, dass col_a in einem eindeutigen Index definiert ist.Also notice that col_a is defined in a unique index. Die Größe des col_a kann weiterhin erhöht werden, da der Datentyp ist ein Varchar und der Index ist nicht das Ergebnis einer PRIMARY KEY-Einschränkung.The size of col_a can still be increased because the data type is a varchar and the index is not the result of a PRIMARY KEY constraint.

-- Create a two-column table with a unique index on the varchar column.  
CREATE TABLE dbo.doc_exy ( col_a varchar(5) UNIQUE NOT NULL, col_b decimal (4,2));  
GO  
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99);  
GO  
-- Verify the current column size.  
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale  
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');  
GO  
-- Increase the size of the varchar column.  
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a varchar(25);  
GO  
-- Increase the scale and precision of the decimal column.  
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4);  
GO  
-- Insert a new row.  
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999) ;  
GO  
-- Verify the current column size.  
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale  
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');  

C.C. Ändern von SpaltensortierungenChanging column collation

Im folgenden Beispiel wird gezeigt, wie die Sortierung einer Spalte geändert wird.The following example shows how to change the collation of a column. Zuerst wird eine Tabelle mit der standardmäßigen Benutzersortierung erstellt.Frist, a table is created table with the default user collation.

CREATE TABLE T3  
(C1 int PRIMARY KEY,  
C2 varchar(50) NULL,  
C3 int NULL,  
C4 int ) ;  
GO  

Anschließend wird die Sortierung der Spalte C2 in Latin1_General_BIN geändert.Next, column C2 collation is changed to Latin1_General_BIN. Beachten Sie, dass der Datentyp erforderlich ist, auch wenn er nicht geändert wird.Note that the data type is required, even though it is not changed.

ALTER TABLE T3  
ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN;  
GO  

Ändern einer Tabelle (Definition)Altering a Table Definition

Die Beispiele in diesem Abschnitt veranschaulichen, wie die Definition einer Tabelle geändert wird.The examples in this section demonstrate how to alter the definition of a table.

A.A. Ändern einer Tabelle, um die Komprimierung zu ändernModifying a table to change the compression

Im folgenden Beispiel wird die Komprimierung einer nicht partitionierten Tabelle geändert.The following example changes the compression of a nonpartitioned table. Der Heap oder der gruppierte Index wird neu erstellt.The heap or clustered index will be rebuilt. Wenn die Tabelle ein Heap ist, werden alle nicht gruppierten Indizes neu erstellt.If the table is a heap, all nonclustered indexes will be rebuilt.

ALTER TABLE T1   
REBUILD WITH (DATA_COMPRESSION = PAGE);  

Im folgenden Beispiel wird die Komprimierung einer partitionierten Tabelle geändert.The following example changes the compression of a partitioned table. Die REBUILD PARTITION = 1-Syntax bewirkt, dass nur die Partition 1 neu erstellt wird.The REBUILD PARTITION = 1 syntax causes only partition number 1 to be rebuilt.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE PartitionTable1   
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  NONE) ;  
GO  

Mit der folgenden alternativen Syntax werden im gleichen Vorgang alle Partitionen in der Tabelle neu erstellt.The same operation using the following alternate syntax causes all partitions in the table to be rebuilt.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE PartitionTable1   
REBUILD PARTITION = ALL   
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;  

Zusätzliche Beispiele zur datenkomprimierung finden Sie unter Datenkomprimierung.For additional data compression examples, see Data Compression.

B.B. Ändern einer columnstore-Tabelle, um die Archivierungskomprimierung zu ändernModifying a columnstore table to change archival compression

Im folgenden Beispiel wird eine columnstore-Tabellenpartition weiter komprimiert, indem ein zusätzlicher Komprimierungsalgorithmus angewendet wird.The following example further compresses a columnstore table partition by applying an additional compression algorithm. Dadurch wird zwar die Tabellengröße reduziert, allerdings erhöht sich auch die zum Speichern und Abrufen benötigte Zeit.This reduces the table to a smaller size, but also increases the time required for storage and retrieval. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speicherbelegung und nicht auf den zusätzlichen Zeitaufwand für das Speichern und Abrufen ankommt.This is useful for archiving or for situations that require less space and can afford more time for storage and retrieval.

Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE PartitionTable1   
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  COLUMNSTORE_ARCHIVE) ;  
GO  

Im folgenden Beispiel wird eine columnstore-Tabellenpartition, die mit der COLUMNSTORE_ARCHIVE-Option komprimiert wurde, dekomprimiert.The following example decompresses a columnstore table partition that was compressed with COLUMNSTORE_ARCHIVE option. Nachdem die Daten wiederhergestellt wurden, sind sie weiterhin mit der columnstore-Komprimierung komprimiert, die für alle columnstore-Tabellen verwendet wird.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore tables.

Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE PartitionTable1   
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  COLUMNSTORE) ;  
GO  

C.C. Wechseln von Partitionen zwischen TabellenSwitching partitions between tables

Im folgenden Beispiel wird eine partitionierte Tabelle erstellt, wobei vorausgesetzt wird, dass das myRangePS1-Partitionsschema bereits in der Datenbank erstellt wurde.The following example creates a partitioned table, assuming that partition scheme myRangePS1 is already created in the database. Anschließend wird eine nicht partitionierte Tabelle mit derselben Struktur wie die partitionierte Tabelle und in derselben Dateigruppe wie PARTITION 2 der PartitionTable-Tabelle erstellt.Next, a non-partitioned table is created with the same structure as the partitioned table and on the same filegroup as PARTITION 2 of table PartitionTable. Die Daten von PARTITION 2 der PartitionTable-Tabelle werden dann in die NonPartitionTable-Tabelle verschoben.The data of PARTITION 2 of table PartitionTable is then switched into table NonPartitionTable.

CREATE TABLE PartitionTable (col1 int, col2 char(10))  
ON myRangePS1 (col1) ;  
GO  
CREATE TABLE NonPartitionTable (col1 int, col2 char(10))  
ON test2fg ;  
GO  
ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ;  
GO  

D.D. Zulassen der Sperrenausweitung in partitionierten TabellenAllowing lock escalation on partitioned tables

Im folgenden Beispiel wird die Sperrenausweitung auf die Partitionsebene einer partitionierten Tabelle ermöglicht.The following example enables lock escalation to the partition level on a partitioned table. Wenn die Tabelle nicht partitioniert ist, wird die Sperrenausweitung auf der TABLE-Ebene festgelegt.If the table is not partitioned, lock escalation is set at the TABLE level.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);  
GO  

E.E. Konfigurieren der Änderungsnachverfolgung in einer TabelleConfiguring change tracking on a table

Im folgenden Beispiel wird die Änderungsnachverfolgung für die Person.Person-Tabelle aktiviert.The following example enables change tracking on the Person.Person table.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

USE AdventureWorks2012;  
ALTER TABLE Person.Person  
ENABLE CHANGE_TRACKING;  

Im folgenden Beispiel werden die Änderungsnachverfolgung sowie die Verfolgung von Spalten aktiviert, die während einer Änderung aktualisiert werden.The following example enables change tracking and enables the tracking of the columns that are updated during a change.

Gilt für: SQL Server 2008SQL Server 2008 bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

USE AdventureWorks2012;  
GO  
ALTER TABLE Person.Person  
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON)  

Im folgenden Beispiel wird die Änderungsnachverfolgung für die Person.Person-Tabelle deaktiviert.The following example disables change tracking on the Person.Person table.

Gilt für: SQL Server 2008SQL Server 2008 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

USE AdventureWorks2012;  
Go  
ALTER TABLE Person.Person  
DISABLE CHANGE_TRACKING;  

Deaktivieren und Aktivieren von Einschränkungen und TriggerDisabling and Enabling Constraints and Triggers

A.A. Deaktivieren und erneutes Aktivieren einer EinschränkungDisabling and re-enabling a constraint

Im folgenden Beispiel wird eine Einschränkung deaktiviert, die die in den Daten akzeptierten Gehälter begrenzt.The following example disables a constraint that limits the salaries accepted in the data. NOCHECK CONSTRAINT wird mit ALTER TABLE verwendet, um die Einschränkung zu deaktivieren und eine Einfügung zuzulassen, die die Einschränkung normalerweise verletzen würde.NOCHECK CONSTRAINT is used with ALTER TABLE to disable the constraint and allow for an insert that would typically violate the constraint. Mit CHECK CONSTRAINT wird die Einschränkung wieder aktiviert.CHECK CONSTRAINT re-enables the constraint.

CREATE TABLE dbo.cnst_example   
(id INT NOT NULL,  
 name VARCHAR(10) NOT NULL,  
 salary MONEY NOT NULL  
    CONSTRAINT salary_cap CHECK (salary < 100000)  
);  

-- Valid inserts  
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);  
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);  

-- This insert violates the constraint.  
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);  

-- Disable the constraint and try again.  
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;  
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);  

-- Re-enable the constraint and try another insert; this will fail.  
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;  
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;  

B.B. Deaktivieren und erneutes Aktivieren eines TriggersDisabling and re-enabling a trigger

Im folgenden Beispiel wird die DISABLE TRIGGER-Option von ALTER TABLE verwendet, um den Trigger zu deaktivieren und eine Einfügung zuzulassen, die den Trigger normalerweise verletzen würde.The following example uses the DISABLE TRIGGER option of ALTER TABLE to disable the trigger and allow for an insert that would typically violate the trigger. Anschließend wird der Trigger mithilfe von ENABLE TRIGGER wieder aktiviert.ENABLE TRIGGER is then used to re-enable the trigger.

CREATE TABLE dbo.trig_example   
(id INT,   
name VARCHAR(12),  
salary MONEY) ;  
GO  
-- Create the trigger.  
CREATE TRIGGER dbo.trig1 ON dbo.trig_example FOR INSERT  
AS  
IF (SELECT COUNT(*) FROM INSERTED  
WHERE salary > 100000) > 0  
BEGIN  
    print 'TRIG1 Error: you attempted to insert a salary > $100,000'  
    ROLLBACK TRANSACTION  
END ;  
GO  
-- Try an insert that violates the trigger.  
INSERT INTO dbo.trig_example VALUES (1,'Pat Smith',100001) ;  
GO  
-- Disable the trigger.  
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1 ;  
GO  
-- Try an insert that would typically violate the trigger.  
INSERT INTO dbo.trig_example VALUES (2,'Chuck Jones',100001) ;  
GO  
-- Re-enable the trigger.  
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1 ;  
GO  
-- Try an insert that violates the trigger.  
INSERT INTO dbo.trig_example VALUES (3,'Mary Booth',100001) ;  
GO  

OnlinevorgängeOnline Operations

A.A. Onlineindexneuerstellung mit LOW_PRIORITY_WAIT-OptionenOnline index rebuild using low priority wait options

Im folgenden Beispiel wird gezeigt, wie eine Onlineindexneuerstellung mithilfe der LOW_PRIORITY_WAIT-Optionen ausgeführt wird.The following example shows how to perform an online index rebuild specifying the low priority wait options.

Gilt für: SQL Server 2014SQL Server 2014 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

ALTER TABLE T1   
REBUILD WITH   
(  
    PAD_INDEX = ON,  
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, 
                                         ABORT_AFTER_WAIT = BLOCKERS ) )  
)  
;  

B.B. OnlinespaltenänderungOnline Alter Column

Das folgende Beispiel zeigt, wie Sie einen ALTER COLUMN-Vorgang mit der Option ONLINE ausführen.The following example shows how to perform an alter column operation with the ONLINE option.

Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

CREATE TABLE dbo.doc_exy (column_a INT ) ;  
GO  
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;  
GO  
ALTER TABLE dbo.doc_exy   
    ALTER COLUMN column_a DECIMAL (5, 2) WITH (ONLINE = ON);  
GO  
sp_help doc_exy;  
DROP TABLE dbo.doc_exy ;  
GO  

Versionsverwaltung durch das SystemSystem Versioning

Die folgenden vier Beispielen können Sie mit der Syntax für die Verwendung von versionsverwaltung durch das System vertraut machen.The following four examples will help you become familiar with the syntax for using system versioning. Zusätzliche Unterstützung finden Sie unter erste Schritte mit Temporalen Tabellen mit Systemversionsverwaltung.For additional assistance, see Getting Started with System-Versioned Temporal Tables.

Gilt für: SQL Server 2016SQL Server 2016 über SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016SQL Server 2016 through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

A.A. Versionsverwaltung durch das System vorhandenen Tabellen hinzufügenAdd System Versioning to Existing Tables

Im folgende Beispiel wird die versionsverwaltung durch das System zu einer vorhandenen Tabelle hinzufügen, und erstellen eine zukünftige Verlaufstabelle veranschaulicht.The following example shows how to add system versioning to an existing table and create a future history table. In diesem Beispiel wird vorausgesetzt, dass eine vorhandene Tabelle aufgerufen InsurancePolicy mit einem Primärschlüssel definiert.This example assumes that there is an existing table called InsurancePolicy with a primary key defined. In diesem Beispiel füllt die neu erstellten Perioden-Spalten für die versionsverwaltung durch das System mit Standardwerten für die Start- und Endzeiten, da diese Werte darf nicht null sein.This example populates the newly created period columns for system versioning using default values for the start and end times because these values cannot be null. Dieses Beispiel verwendet die HIDDEN-Klausel, um sicherzustellen, dass keine Auswirkungen auf vorhandene Anwendungen, die Interaktion mit der aktuellen Tabelle.This example uses the HIDDEN clause to ensure no impact on existing applications interacting with the current table. Darüber hinaus verwendet HISTORY_RETENTION_PERIOD, die verfügbar ist SQL-DatenbankSQL Database nur.It also uses HISTORY_RETENTION_PERIOD that is available on SQL-DatenbankSQL Database only.

--Alter non-temporal table to define periods for system versioning  
ALTER TABLE InsurancePolicy  
ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime),   
SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL 
    DEFAULT GETUTCDATE(),   
SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL 
    DEFAULT CONVERT(DATETIME2, '9999-12-31 23:59:59.99999999');  
--Enable system versioning with 1 year retention for historical data
ALTER TABLE InsurancePolicy 
SET (SYSTEM_VERSIONING = ON (HISTORY_RETENTION_PERIOD = 1 YEAR));  

B.B. Migrieren einer vorhandenen Projektmappe um Versionsverwaltung durch das System zu verwenden.Migrate An Existing Solution to Use System Versioning

Das folgende Beispiel zeigt, wie zum Migrieren zu versionsverwaltung durch das System aus einer Projektmappe, die Trigger verwendet temporalen Unterstützung zu imitieren.The following example shows how to migrate to system versioning from a solution that uses triggers to mimic temporal support. Im Beispiel wird vorausgesetzt, es wird eine vorhandene Lösung, die verwendet eine ProjectTaskCurrent Tabelle und eine ProjectTaskHistory Spalten der Tabelle für ihre vorhandene Lösung, die verwendet wird das Datum wurde überarbeitet und Änderungsdatum für die Zeiträume, diese zeitraumspalten den datetime2-Datentyp nicht verwenden und dass die ProjectTaskCurrent Tabelle wurde kein Primärschlüssel definiert.The example assumes there is an existing solution that uses a ProjectTaskCurrent table and a ProjectTaskHistory table for its existing solution, that is uses the Changed Date and Revised Date columns for its periods, that these period columns do not use the datetime2 datatype and that the ProjectTaskCurrent table has a primary key defined.

-- Drop existing trigger  
DROP TRIGGER ProjectTaskCurrent_Trigger;  
-- Adjust the schema for current and history table  
-- Change data types for existing period columns  
ALTER TABLE ProjectTaskCurrent ALTER COLUMN [Changed Date] datetime2 NOT NULL;  
ALTER TABLE ProjectTaskCurrent ALTER COLUMN [Revised Date] datetime2 NOT NULL;  

ALTER TABLE ProjectTaskHistory ALTER COLUMN [Changed Date] datetime2 NOT NULL;  
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Revised Date] datetime2 NOT NULL;  

-- Add SYSTEM_TIME period and set system versioning with linking two existing tables  
-- (a certain set of data checks happen in the background)  
ALTER TABLE ProjectTaskCurrent  
ADD PERIOD FOR SYSTEM_TIME ([Changed Date], [Revised Date])  

ALTER TABLE ProjectTaskCurrent  
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ProjectTaskHistory, DATA_CONSISTENCY_CHECK = ON))  

C.C. Deaktivieren und erneutes Aktivieren der Systemversionsverwaltung Tabellenschema ändernDisabling and Re-Enabling System Versioning to Change Table Schema

In diesem Beispiel wird gezeigt, wie zum Deaktivieren der versionsverwaltung durch das System auf die Department Tabelle, eine Spalte hinzufügen und versionsverwaltung durch das System erneut zu aktivieren.This example shows how to disable system versioning on the Department table, add a column, and re-enable system versioning. Deaktivieren von versionsverwaltung durch das System ist erforderlich, um das Tabellenschema zu ändern.Disabling system versioning is required in order to modify the table schema. Führen Sie diese Schritte innerhalb einer Transaktion, um zu verhindern, dass Updates für beide Tabellen beim Aktualisieren des Tabellenschemas, wodurch der Datenbankadministrator, überspringen Sie die Konsistenz der Daten überprüfen, wenn Sie versionsverwaltung durch das System erneut zu aktivieren und eine Leistung zu erhalten profitieren.Perform these steps within a transaction to prevent updates to both tables while updating the table schema, which enables the DBA to skip the data consistency check when re-enabling system versioning and gain a performance benefit. Beachten Sie, dass Aufgaben wie das Erstellen von Statistiken, wechseln von Partitionen oder Komprimierung anwenden, um eine oder beide Tabellen erfordert keine versionsverwaltung durch das System zu deaktivieren.Note that tasks such as creating statistics, switching partitions or applying compression to one or both tables does not require disabling system versioning.

BEGIN TRAN  
/* Takes schema lock on both tables */  
ALTER TABLE Department  
    SET (SYSTEM_VERSIONING = OFF);  
/* expand table schema for temporal table */  
ALTER TABLE Department  
     ADD Col5 int NOT NULL DEFAULT 0;  
/* Expand table schema for history table */  
ALTER TABLE DepartmentHistory  
    ADD Col5 int NOT NULL DEFAULT 0;  
/* Re-establish versioning again  */
ALTER TABLE Department  
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.DepartmentHistory, 
                                 DATA_CONSISTENCY_CHECK = OFF));  
COMMIT   

D.D. Entfernen von Versionsverwaltung durch das SystemRemoving System Versioning

In diesem Beispiel wird gezeigt, wie entfernen Sie die versionsverwaltung durch das System vollständig aus der Department-Tabelle und Drop der DepartmentHistory Tabelle.This example shows how to completely remove system versioning from the Department table and drop the DepartmentHistory table. Möglicherweise möchten Sie optional auch die Perioden-Spalten zum Aufzeichnen von Versionsinformationen für System zu löschen.Optionally, you might also want to drop the period columns used by the system to record system versioning information. Beachten Sie, dass Sie entweder gelöscht werden können die Department oder DepartmentHistory Tabellen während der versionsverwaltung durch das System aktiviert ist.Note that you cannot drop either the Department or the DepartmentHistory tables while system versioning is enabled.

ALTER TABLE Department  
    SET (SYSTEM_VERSIONING = OFF);  
ALTER TABLE Department  
DROP PEROD FOR SYSTEM_TIME;  
DROP TABLE DepartmentHistory;  

Beispiele: Azure SQL Data WarehouseAzure SQL Data Warehouse und Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

In den folgenden Beispielen A bis C verwendet die FactResellerSales-Tabelle in der AdventureWorksPDW2012AdventureWorksPDW2012 Datenbank.The following examples A through C use the FactResellerSales table in the AdventureWorksPDW2012AdventureWorksPDW2012 database.

E.E. Bestimmen, ob eine Tabelle partitioniert istDetermining if a table is partitioned

Die folgende Abfrage gibt mindestens eine Zeile zurück, wenn die FactResellerSales -Tabelle partitioniert ist.The following query returns one or more rows if the table FactResellerSales is partitioned. Wenn die Tabelle nicht partitioniert ist, werden keine Zeilen zurückgegeben.If the table is not partitioned, no rows are returned.

SELECT * FROM sys.partitions AS p  
JOIN sys.tables AS t  
    ON  p.object_id = t.object_id  
WHERE p.partition_id IS NOT NULL  
    AND t.name = 'FactResellerSales';  

F.F. Bestimmen der Begrenzungswerte für eine partitionierte TabelleDetermining boundary values for a partitioned table

Die folgende Abfrage gibt die Begrenzungswerte für jede Partition in der FactResellerSales -Tabelle zurück.The following query returns the boundary values for each partition in the FactResellerSales table.

SELECT t.name AS TableName, i.name AS IndexName, p.partition_number, 
    p.partition_id, i.data_space_id, f.function_id, f.type_desc, 
    r.boundary_id, r.value AS BoundaryValue   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.partitions AS p  
    ON i.object_id = p.object_id AND i.index_id = p.index_id   
JOIN  sys.partition_schemes AS s   
    ON i.data_space_id = s.data_space_id  
JOIN sys.partition_functions AS f   
    ON s.function_id = f.function_id  
LEFT JOIN sys.partition_range_values AS r   
    ON f.function_id = r.function_id and r.boundary_id = p.partition_number  
WHERE t.name = 'FactResellerSales' AND i.type <= 1  
ORDER BY p.partition_number;  

G.G. Bestimmen die Partitionsspalte für eine partitionierte TabelleDetermining the partition column for a partitioned table

Die folgende Abfrage gibt den Namen der Partitionierungsspalte für die Tabelle zurück.The following query returns the name of the partitioning column for table. FactResellerSalesinstalliert haben.FactResellerSales.

SELECT t.object_id AS Object_ID, t.name AS TableName, 
    ic.column_id as PartitioningColumnID, c.name AS PartitioningColumnName   
FROM sys.tables AS t  
JOIN sys.indexes AS i  
    ON t.object_id = i.object_id  
JOIN sys.columns AS c  
    ON t.object_id = c.object_id  
JOIN sys.partition_schemes AS ps  
    ON ps.data_space_id = i.data_space_id  
JOIN sys.index_columns AS ic  
    ON ic.object_id = i.object_id 
    AND ic.index_id = i.index_id AND ic.partition_ordinal > 0  
WHERE t.name = 'FactResellerSales'  
AND i.type <= 1  
AND c.column_id = ic.column_id;  

H.H. Zusammenführen von zwei PartitionenMerging two partitions

Im folgenden Beispiel werden zwei Partitionen auf einer Tabelle.The following example merges two partitions on a table.

Die Customer Tabelle weist folgende Definition:The Customer table has the following definition:

CREATE TABLE Customer (  
    id int NOT NULL,  
    lastName varchar(20),  
    orderCount int,  
    orderDate date)  
WITH   
    ( DISTRIBUTION = HASH(id),  
    PARTITION ( orderCount RANGE LEFT  
    FOR VALUES (1, 5, 10, 25, 50, 100)));  

Der folgende Befehl kombiniert die Partitionsgrenzen 10 und 25.The following command combines the 10 and 25 partition boundaries.

ALTER TABLE Customer MERGE RANGE (10);  

Die neue DDL-Code für die Tabelle ist:The new DDL for the table is:

CREATE TABLE Customer (  
    id int NOT NULL,  
    lastName varchar(20),  
    orderCount int,  
    orderDate date)  
WITH   
    ( DISTRIBUTION = HASH(id),  
    PARTITION ( orderCount RANGE LEFT  
    FOR VALUES (1, 5, 25, 50, 100)));  

I.I. Teilen der partitionSplitting a partition

Im folgenden Beispiel wird eine neue Partition auf einer Tabelle.The following example splits a partition on a table.

Die Customer Tabelle wurde der folgende DDL-Code:The Customer table has the following DDL:

DROP TABLE Customer;  

CREATE TABLE Customer (  
    id int NOT NULL,  
    lastName varchar(20),  
    orderCount int,  
    orderDate date)  
WITH   
    ( DISTRIBUTION = HASH(id),  
    PARTITION ( orderCount RANGE LEFT  
    FOR VALUES (1, 5, 10, 25, 50, 100 )));  

Der folgende Befehl erstellt eine neue Partition, die durch den Wert 75, zwischen 50 und 100 gebunden.The following command creates a new partition bound by the value 75, between 50 and 100.

ALTER TABLE Customer SPLIT RANGE (75);  

Die neue DDL-Code für die Tabelle ist:The new DDL for the table is:

CREATE TABLE Customer (  
   id int NOT NULL,  
   lastName varchar(20),  
   orderCount int,  
   orderDate date)  
   WITH DISTRIBUTION = HASH(id),  
   PARTITION ( orderCount (RANGE LEFT  
      FOR VALUES (1, 5, 10, 25, 50, 75, 100 )));  

J.J. Verwenden SWITCH so verschieben Sie eine Partition in einer VerlaufstabelleUsing SWITCH to move a partition to a history table

Im folgenden Beispiel werden die Daten in einer Partition die Orders Tabelle zu einer Partition in der OrdersHistory Tabelle.The following example moves the data in a partition of the Orders table to a partition in the OrdersHistory table.

Die Orders Tabelle wurde der folgende DDL-Code:The Orders table has the following DDL:

CREATE TABLE Orders (  
    id INT,  
    city VARCHAR (25),  
    lastUpdateDate DATE,  
    orderDate DATE )  
WITH   
    (DISTRIBUTION = HASH ( id ),  
    PARTITION ( orderDate RANGE RIGHT   
    FOR VALUES ('2004-01-01', '2005-01-01', '2006-01-01', '2007-01-01' )));  

In diesem Beispiel wird die Orders Tabelle verfügt über die folgenden Partitionen.In this example, the Orders table has the following partitions. Jede Partition enthält Daten.Each partition contains data.

PartitionPartition Verfügt über Daten?Has data? Bereich der GrenzeBoundary range
11 jaYes OrderDate < "2004-01-01"OrderDate < '2004-01-01'
22 jaYes "2004-01-01' < = OrderDate <" 2005-01-01 "'2004-01-01' <= OrderDate < '2005-01-01'
33 jaYes "2005-01-01' < = OrderDate <" 2006-01-01 "'2005-01-01' <= OrderDate< '2006-01-01'
44 jaYes "2006-01-01'< = OrderDate <" 2007-01-01 "'2006-01-01'<= OrderDate < '2007-01-01'
55 jaYes "2007-01-01' < = OrderDate'2007-01-01' <= OrderDate
  • Partition 1 (enthält Daten): OrderDate < "2004-01-01"Partition 1 (has data): OrderDate < '2004-01-01'
  • Partition 2 (enthält Daten): "2004-01-01' < = OrderDate <" 2005-01-01 "Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Partition 3 (enthält Daten): ' 2005-01-01' < = OrderDate < "2006-01-01"Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 4 (enthält Daten): "2006-01-01'< = OrderDate <" 2007-01-01 "Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 5 (Daten hat): ' 2007-01-01' < = OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

Die OrdersHistory Tabelle hat die folgende DDL, die identischen Spalten und Spaltennamen aufweist als die Orders Tabelle.The OrdersHistory table has the following DDL, which has identical columns and column names as the Orders table. Beide sind auf Hash verteilt die id Spalte.Both are hash-distributed on the id column.

CREATE TABLE OrdersHistory (  
   id INT,  
   city VARCHAR (25),  
   lastUpdateDate DATE,  
   orderDate DATE )  
WITH   
    (DISTRIBUTION = HASH ( id ),  
    PARTITION ( orderDate RANGE RIGHT   
    FOR VALUES ( '2004-01-01' )));  

Obwohl die Spalten und die Spaltennamen identisch sein müssen, müssen die Partitionsgrenzen nicht identisch sein.Although the columns and column names must be the same, the partition boundaries do not need to be the same. In diesem Beispiel wird die OrdersHistory Tabelle verfügt über die folgenden zwei Partitionen, und beide Partitionen leer sind:In this example, the OrdersHistory table has the following two partitions and both partitions are empty:

  • Partition 1 (keine Daten): OrderDate < "2004-01-01"Partition 1 (no data): OrderDate < '2004-01-01'
  • Partition 2 (leer): "2004-01-01' < = OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Für den vorherigen zwei Tabellen, der folgende Befehl verschiebt alle Zeilen mit OrderDate < '2004-01-01' aus der Orders Tabelle, auf die OrdersHistory Tabelle.For the previous two tables, the following command moves all rows with OrderDate < '2004-01-01' from the Orders table to the OrdersHistory table.

ALTER TABLE Orders SWITCH PARTITION 1 TO OrdersHistory PARTITION 1;  

Daher die erste partition im Orders leer ist und die erste Partition in OrdersHistory Daten enthält.As a result, the first partition in Orders is empty and the first partition in OrdersHistory contains data. Die Tabellen werden jetzt wie folgt angezeigt:The tables now appear as follows:

OrdersTabelleOrders table

  • Partition 1 (leer): OrderDate < "2004-01-01"Partition 1 (empty): OrderDate < '2004-01-01'
  • Partition 2 (enthält Daten): "2004-01-01' < = OrderDate <" 2005-01-01 "Partition 2 (has data): '2004-01-01' <= OrderDate < '2005-01-01'
  • Partition 3 (enthält Daten): ' 2005-01-01' < = OrderDate < "2006-01-01"Partition 3 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 4 (enthält Daten): "2006-01-01'< = OrderDate <" 2007-01-01 "Partition 4 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 5 (Daten hat): ' 2007-01-01' < = OrderDatePartition 5 (has data): '2007-01-01' <= OrderDate

    OrdersHistoryTabelleOrdersHistory table

  • Partition 1 (enthält Daten): OrderDate < "2004-01-01"Partition 1 (has data): OrderDate < '2004-01-01'

  • Partition 2 (leer): "2004-01-01' < = OrderDatePartition 2 (empty): '2004-01-01' <= OrderDate

Zum Bereinigen der Orders Tabelle können Sie die leere Partition entfernen, indem Sie das Zusammenführen von Partitionen 1 und 2 ist wie folgt:To clean up the Orders table, you can remove the empty partition by merging partitions 1 and 2 as follows:

ALTER TABLE Orders MERGE RANGE ('2004-01-01');  

Nach der Zusammenführung der Orders Tabelle verfügt über die folgenden Partitionen:After the merge, the Orders table has the following partitions:

OrdersTabelleOrders table

  • Partition 1 (enthält Daten): OrderDate < "2005-01-01"Partition 1 (has data): OrderDate < '2005-01-01'
  • Partition 2 (enthält Daten): ' 2005-01-01' < = OrderDate < "2006-01-01"Partition 2 (has data): '2005-01-01' <= OrderDate< '2006-01-01'
  • Partition 3 (enthält Daten): "2006-01-01'< = OrderDate <" 2007-01-01 "Partition 3 (has data): '2006-01-01'<= OrderDate < '2007-01-01'
  • Partition 4 (enthält Daten): ' 2007-01-01' < = OrderDatePartition 4 (has data): '2007-01-01' <= OrderDate

Angenommen, ein weiteres Jahr übergibt, und Sie bereit sind, die das Jahr 2005 zu archivieren.Suppose another year passes and you are ready to archive the year 2005. Sie können eine leere Partition zuordnen, für das Jahr 2005 in der OrdersHistory Tabelle, und teilen Sie die leere Partition wie folgt:You can allocate an empty partition for the year 2005 in the OrdersHistory table by splitting the empty partition as follows:

ALTER TABLE OrdersHistory SPLIT RANGE ('2005-01-01');  

Nach der Unterteilung der OrdersHistory Tabelle verfügt über die folgenden Partitionen:After the split, the OrdersHistory table has the following partitions:

OrdersHistoryTabelleOrdersHistory table

  • Partition 1 (enthält Daten): OrderDate < "2004-01-01"Partition 1 (has data): OrderDate < '2004-01-01'
  • Partition 2 (leer): "2004-01-01" < "2005-01-01"Partition 2 (empty): '2004-01-01' < '2005-01-01'
  • Partition 3 (leer): ' 2005-01-01' < = OrderDatePartition 3 (empty): '2005-01-01' <= OrderDate

Siehe auchSee Also

sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
DROP TABLE ( Transact-SQL ) DROP TABLE (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
ALTER PARTITION SCHEME ( Transact-SQL ) ALTER PARTITION SCHEME (Transact-SQL)
ALTER PARTITION FUNCTION ( Transact-SQL ) ALTER PARTITION FUNCTION (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)