CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Erstellt eine neue Tabelle in SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Creates a new table in SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Hinweis

Eine SQL Data WarehouseSQL Data Warehouse-Syntax finden Sie unter CREATE TABLE (Azure SQL Data Warehouse).For SQL Data WarehouseSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

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

Einfache SyntaxSimple Syntax

--Simple CREATE TABLE Syntax (common if not using options)  
CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    ( { <column_definition> } [ ,...n ] )   
[ ; ]  

Vollständige SyntaxFull Syntax

--Disk-Based CREATE TABLE Syntax  
CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    [ AS FileTable ]  
    ( {   <column_definition>   
        | <computed_column_definition>    
        | <column_set_definition>   
        | [ <table_constraint> ] [ ,... n ] 
        | [ <table_index> ] }  
          [ ,...n ]    
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name   
             , system_end_time_column_name ) ]  
      )  
    [ ON { partition_scheme_name ( partition_column_name )   
           | filegroup   
           | "default" } ]   
    [ TEXTIMAGE_ON { filegroup | "default" } ]   
    [ FILESTREAM_ON { partition_scheme_name   
           | filegroup   
           | "default" } ]  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[ ; ]  

<column_definition> ::=  
column_name <data_type>  
    [ FILESTREAM ]  
    [ COLLATE collation_name ]   
    [ SPARSE ]  
    [ MASKED WITH ( FUNCTION = ' mask_function ') ]  
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ]   
    [ IDENTITY [ ( seed,increment ) ]  
    [ NOT FOR REPLICATION ]   
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]   
    [ NULL | NOT NULL ]  
    [ ROWGUIDCOL ]  
    [ ENCRYPTED WITH   
        ( COLUMN_ENCRYPTION_KEY = key_name ,  
          ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
        ) ]  
    [ <column_constraint> [, ...n ] ]   
    [ <column_index> ]  

<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   

<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH FILLFACTOR = fillfactor    
          | WITH ( < index_option > [ , ...n ] )   
        ]   
        [ ON { partition_scheme_name ( partition_column_name )   
            | filegroup | "default" } ]  

  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   

  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
}   

<column_index> ::=   
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]  
    [ WITH ( <index_option> [ ,... n ] ) ]  
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

<computed_column_definition> ::=  
column_name AS computed_column_expression   
[ PERSISTED [ NOT NULL ] ]  
[   
    [ CONSTRAINT constraint_name ]  
    { PRIMARY KEY | UNIQUE }  
        [ CLUSTERED | NONCLUSTERED ]  
        [   
            WITH FILLFACTOR = fillfactor   
          | WITH ( <index_option> [ , ...n ] )  
        ]  
        [ ON { partition_scheme_name ( partition_column_name )   
        | filegroup | "default" } ]  

    | [ FOREIGN KEY ]   
        REFERENCES referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE } ]   
        [ ON UPDATE { NO ACTION } ]   
        [ NOT FOR REPLICATION ]   

    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
]   

<column_set_definition> ::=  
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS  

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

< table_index > ::=   
{  
    {  
      INDEX index_name [ CLUSTERED | NONCLUSTERED ]   
         (column_name [ ASC | DESC ] [ ,... n ] )   
    | INDEX index_name CLUSTERED COLUMNSTORE  
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )  
    }  
    [ WITH ( <index_option> [ ,... n ] ) ]   
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

}   

<table_option> ::=  
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }  
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
      [ , ...n ] ) ]]  
    [ FILETABLE_DIRECTORY = <directory_name> ]   
    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]  
    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]  
    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]  
    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]  
    [ SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name  
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] ]  
    [ REMOTE_DATA_ARCHIVE =   
      {   
          ON [ ( <table_stretch_options> [,...n] ) ]  
        | OFF ( MIGRATION_STATE = PAUSED )   
      }   
    ]  
}  

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

<index_option> ::=  
{   
    PAD_INDEX = { ON | OFF }   
  | FILLFACTOR = fillfactor   
  | IGNORE_DUP_KEY = { ON | OFF }   
  | STATISTICS_NORECOMPUTE = { ON | OFF }   
  | STATISTICS_INCREMENTAL = { ON | OFF }  
  | ALLOW_ROW_LOCKS = { ON | OFF}   
  | ALLOW_PAGE_LOCKS ={ ON | OFF}   
  | COMPRESSION_DELAY= {0 | delay [Minutes]}  
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
       [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
       [ , ...n ] ) ]  
}  
<range> ::=   
<partition_number_expression> TO <partition_number_expression>  
--Memory optimized 
LE Syntax  
CREATE TABLE  
    [database_name . [schema_name ] . | schema_name . ] table_name  
    ( { <column_definition>  
    | [ <table_constraint> ] [ ,... n ]  
    | [ <table_index> ]  
      [ ,... n ] }   
      [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name   
        , system_end_time_column_name ) ]  
)  
    [ WITH ( <table_option> [ ,... n ] ) ]  
 [ ; ]  

<column_definition> ::=  
column_name <data_type>  
    [ COLLATE collation_name ]  
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]   
    [ NULL | NOT NULL ]  
[  
    [ CONSTRAINT constraint_name ] DEFAULT memory_optimized_constant_expression ]  
    | [ IDENTITY [ ( 1, 1 ) ]  
]  
    [ <column_constraint> ]  
    [ <column_index> ]  

<data type> ::=  
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]  

<column_constraint> ::=  
 [ CONSTRAINT constraint_name ]  
{   
  { PRIMARY KEY | UNIQUE }    
      {   NONCLUSTERED   
        | NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count)   
      }   
  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
  | CHECK ( logical_expression )   
}  

< table_constraint > ::=  
 [ CONSTRAINT constraint_name ]  
{    
   { PRIMARY KEY | UNIQUE }  
     {   
       NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
       | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )   
                    }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}  

<column_index> ::=  
  INDEX index_name  
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count)  }  

<table_index> ::=  
  INDEX index_name  
{   [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)   
  | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )   
      [ ON filegroup_name | default ]  
  | CLUSTERED COLUMNSTORE [WITH ( COMPRESSION_DELAY = {0 | delay [Minutes]})]  
      [ ON filegroup_name | default ]  

}  

<table_option> ::=  
{  
    MEMORY_OPTIMIZED = ON   
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}  
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name  
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]   

}  

ArgumenteArguments

database_namedatabase_name
Der Name der Datenbank, in der die Tabelle erstellt wird.Is the name of the database in which the table is created. database_name muss dem Namen einer vorhandenen Datenbank entsprechen.database_name must specify the name of an existing database. Wird database_name nicht angegeben, wird standardmäßig die aktuelle Datenbank verwendet.If not specified, database_name defaults to the current database. Der Anmeldename für die aktuelle Verbindung muss einer vorhandenen Benutzer-ID in der durch database_name angegebenen Datenbank zugeordnet sein. Diese Benutzer-ID muss über CREATE TABLE-Berechtigungen verfügen.The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

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

table_nametable_name
Der Name der neuen Tabelle.Is the name of the new table. Tabellennamen müssen die Regeln für Bezeichner erfüllen.Table names must follow the rules for identifiers. table_name kann höchstens 128 Zeichen aufweisen, ausgenommen lokale temporäre Tabellennamen (Namen mit einem Nummernzeichen (#) als Präfix), bei denen maximal 116 Zeichen zulässig sind.table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

AS FileTableAS FileTable

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Erstellt die neue Tabelle als FileTable.Creates the new table as a FileTable. Sie geben keine Spalten an, da eine FileTable über ein festes Schema verfügt.You do not specify columns because a FileTable has a fixed schema. Weitere Informationen zu FileTables finden Sie unter FileTables (SQL Server).For more information about FileTables, see FileTables (SQL Server).

column_namecolumn_name
computed_column_expressioncomputed_column_expression
Ein Ausdruck, der den Wert einer berechneten Spalte definiert.Is an expression that defines the value of a computed column. Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physisch in der Tabelle gespeichert ist, es sei denn, die Spalte wurde (mit PERSISTED) als persistente Spalte markiert.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. Die Spalte wird anhand eines Ausdrucks berechnet, der andere Spalten in derselben Tabelle verwendet.The column is computed from an expression that uses other columns in the same table. Eine berechnete Spalte kann beispielsweise folgende Definition aufweisen: cost AS price*qty. Der Ausdruck kann der Name einer nicht berechneten Spalte, eine Konstante, eine Funktion, eine Variable oder eine beliebige durch einen oder mehrere Operatoren verbundene Kombination der genannten Möglichkeiten sein.For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. Der Ausdruck darf keine Unterabfrage sein oder Aliasdatentypen enthalten.The expression cannot be a subquery or contain alias data types.

Berechnete Spalten können in SELECT-Listen, WHERE-Klauseln, ORDER BY-Klauseln oder an anderen Stellen verwendet werden, an denen reguläre Ausdrücke verwendet werden können. Dabei gelten folgende Ausnahmen:Computed columns can be used in select lists, WHERE clauses, ORDER BY clauses, or any other locations in which regular expressions can be used, with the following exceptions:

  • Berechnete Spalten müssen als PERSISTED gekennzeichnet sein, um Teil einer FOREIGN KEY- oder CHECK-Einschränkung zu sein.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • Eine berechnete Spalte kann als Schlüsselspalte in einem Index oder als Teil einer PRIMARY KEY- oder UNIQUE-Einschränkung verwendet werden, wenn der Wert der berechneten Spalte durch einen deterministischen Ausdruck definiert ist und der Datentyp des Ergebnisses in Indexspalten zulässig ist.A computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns.

    Wenn eine Tabelle beispielsweise die beiden ganzzahligen Spalten a und b enthält, kann für die berechnete Spalte a+b ein Index erstellt werden. Für die berechnete Spalte a+DATEPART(dd, GETDATE()) ist dies jedoch nicht möglich, da sich der Wert in späteren Aufrufen möglicherweise ändert.For example, if the table has integer columns a and b, the computed column a+b may be indexed, but computed column a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • Eine berechnete Spalte kann nicht das Ziel einer INSERT- oder UPDATE-Anweisung sein.A computed column cannot be the target of an INSERT or UPDATE statement.

Hinweis

Jede Zeile in einer Tabelle kann unterschiedliche Werte in den Spalten aufweisen, die für eine berechnete Spalte herangezogen werden, daher enthält die berechnete Spalte möglicherweise nicht in jeder Zeile den gleichen Wert.Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

Die NULL-Zulässigkeit berechneter Spalten wird automatisch von Datenbank-EngineDatabase Engine auf Grundlage der verwendeten Ausdrücke bestimmt.Based on the expressions that are used, the nullability of computed columns is determined automatically by the Datenbank-EngineDatabase Engine. Für das Ergebnis der meisten Ausdrücke wird die NULL-Zulässigkeit angenommen, und zwar auch dann, wenn nur Spalten vorhanden sind, die keine NULL-Werte zulassen, da mögliche Unter- oder Überläufe ebenfalls zu NULL-Ergebnissen führen.The result of most expressions is considered nullable even if only nonnullable columns are present, because possible underflows or overflows also produce NULL results. Verwenden Sie die COLUMNPROPERTY-Funktion mit der Eigenschaft AllowsNull, um die NULL-Zulässigkeit von berechneten Spalten in einer Tabelle zu untersuchen.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Ein Ausdruck, der NULL-Werte zulässt, kann nur durch die Angabe von ISNULL mit der Konstante in einen Ausdruck umgewandelt werden, der keine NULL-Werte zulässt. Die Konstante check_expression ist ein Wert ungleich NULL, durch den jedes NULL-Ergebnis ersetzt wird.An expression that is nullable can be turned into a nonnullable one by specifying ISNULL with the check_expression constant, where the constant is a nonnull value substituted for any NULL result. Für berechnete Spalten, die auf CLR-benutzerdefinierten Typausdrücken (Common Language Runtime) basieren, ist die REFERENCES-Berechtigung für den Typ erforderlich.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
Gibt an, dass das SQL Server-Datenbank-EngineSQL Server Database Engine die berechneten Werte physisch in der Tabelle speichert und die Werte aktualisiert, wenn Spalten, von denen die berechnete Spalte abhängt, aktualisiert werden.Specifies that the SQL Server-Datenbank-EngineSQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. Wenn Sie eine berechnete Spalte (mit PERSISTED) als persistente Spalte markieren, können Sie einen Index für eine berechnete Spalte erstellen, die deterministisch, jedoch nicht genau ist.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. Weitere Informationen finden Sie unter Indexes on Computed Columns.For more information, see Indexes on Computed Columns. Alle berechneten Spalten, die als Partitionierungsspalten einer partitionierten Tabelle verwendet werden, müssen ausdrücklich als PERSISTED gekennzeichnet sein.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. computed_column_expression muss deterministisch sein, wenn PERSISTED angegeben wird.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | " default " }ON { partition_scheme | filegroup | " default " }

Gibt das Partitionsschema oder die Dateigruppe an, in der die Tabelle gespeichert wird.Specifies the partition scheme or filegroup on which the table is stored. Wenn partition_scheme angegeben wird, soll die Tabelle eine partitionierte Tabelle sein, deren Partitionen in einem Satz aus einer oder mehreren in partition_scheme angegebenen Dateigruppen gespeichert werden.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. Wenn filegroup angegeben ist, wird die Tabelle in der genannten Dateigruppe gespeichert.If filegroup is specified, the table is stored in the named filegroup. Die Dateigruppe muss in der Datenbank vorhanden sein.The filegroup must exist within the database. Wenn " default " angegeben oder ON nicht angegeben sind, wird die Tabelle in der Standarddateigruppe gespeichert.If " default " is specified, or if ON is not specified at all, the table is stored on the default filegroup. Der in CREATE TABLE angegebene Speichermechanismus einer Tabelle kann nachfolgend nicht mehr geändert werden.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | " default "} kann auch in den Einschränkungen PRIMARY KEY oder UNIQUE angegeben werden.ON {partition_scheme | filegroup | " default "} can also be specified in a PRIMARY KEY or UNIQUE constraint. Diese Einschränkungen erstellen Indizes.These constraints create indexes. Wenn filegroup angegeben ist, wird der Index in der genannten Dateigruppe gespeichert.If filegroup is specified, the index is stored in the named filegroup. Wenn " default " angegeben oder ON überhaupt nicht angegeben sind, wird der Index in derselben Dateigruppe wie die Tabelle gespeichert.If " default " is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. Wenn die PRIMARY KEY- oder die UNIQUE-Einschränkung einen gruppierten Index erstellt, werden die Datenseiten für die Tabelle in derselben Dateigruppe wie der Index gespeichert.If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. Wenn CLUSTERED angegeben wird oder ein gruppierter Index anderweitig durch die Einschränkung erstellt wird, und ein Wert für partition_scheme angegeben wird, der von der Angabe für partition_scheme oder filegroup der Tabellendefinition abweicht (oder umgekehrt), wird nur die Einschränkungsdefinition berücksichtigt. Der andere Wert wird ignoriert.If CLUSTERED is specified or the constraint otherwise creates a clustered index, and a partition_scheme is specified that differs from the partition_scheme or filegroup of the table definition, or vice-versa, only the constraint definition will be honored, and the other will be ignored.

Hinweis

In diesem Zusammenhang ist DEFAULT kein Schlüsselwort.In this context, default is not a keyword. Es handelt sich dabei um einen Bezeichner für die Standarddateigruppe. Dieser muss wie in ON " default " or ON [ default ] durch Trennzeichen getrennt werden.It is an identifier for the default filegroup and must be delimited, as in ON " default " or ON [ default ]. Wenn " default " angegeben ist, muss die QUOTED_IDENTIFIER-Option in der aktuellen Sitzung auf ON festgelegt sein.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).

Hinweis

Nachdem Sie eine partitionierte Tabelle erstellt haben, erwägen Sie, die LOCK_ESCALATION-Option für die Tabelle auf AUTO festzulegen.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. Dies kann die Parallelität verbessern, indem die Sperren auf Partitionsebene (HoBT) statt auf Tabellenebene aktiviert werden.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. Weitere Informationen finden Sie unter ALTER TABLE (Transact-SQL).For more information, see ALTER TABLE (Transact-SQL).

TEXTIMAGE_ON { filegroup| " default " }TEXTIMAGE_ON { filegroup| " default " }
Gibt an, dass die Spalten vom Typ text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) und eines CLR-benutzerdefinierten Typs (einschließlich „geometry“ und „geography“) in der angegebenen Dateigruppe gespeichert werden.Indicates that the text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), and CLR user-defined type columns (including geometry and geography) are stored on the specified filegroup.

TEXTIMAGE_ON ist nicht zulässig, wenn die Tabelle keine Spalten für umfangreiche Werte enthält.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. TEXTIMAGE_ON darf nicht angegeben werden, wenn partition_scheme angegeben wird.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. Wenn " default " angegeben wird oder TEXTIMAGE_ON nicht angegeben wird, werden die Spalten für umfangreiche Werte in der Standarddateigruppe gespeichert.If " default " is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. Die in CREATE TABLE angegebene Speicherung einer Spalte für umfangreiche Werte kann nachfolgend nicht mehr geändert werden.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

Hinweis

Varchar(max), nvarchar(max), varbinary(max), XML und große UDT-Werte werden bis zu einem Höchstwert von 8000 Bytes direkt in der Datenzeile gespeichert, sofern der Wert die Größe des Datensatzes nicht überschreitet.Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8000 bytes and as long as the value can fit the record. Überschreitet der Wert die Größe des Datensatzes, wird ein Zeiger innerhalb der Zeilen gespeichert, während der Rest außerhalb der Zeilen im LOB-Speicherbereich gespeichert wird.If the value does not fit in the record, a pointer is sorted in-row and the rest is stored out of row in the LOB storage space. Der Standardwert ist 0 (null).0 is the default value. TEXTIMAGE_ON ändert nur den Speicherort des LOB-Speicherbereichs – in Zeilen gespeicherte Daten werden nicht beeinträchtigt.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. Verwenden Sie große Werttypen von „sp_tableoption“ außerhalb der Zeilen, um den gesamten LOB-Wert außerhalb der Zeile zu speichern.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

Hinweis

In diesem Zusammenhang ist DEFAULT kein Schlüsselwort.In this context, default is not a keyword. Es handelt sich um einen Bezeichner für die Standarddateigruppe, der begrenzt werden muss, wie z.B. in TEXTIMAGE_ON " default " oder TEXTIMAGE_ON [ default ].It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON " default " or TEXTIMAGE_ON [ default ]. Wenn " default " angegeben ist, muss die QUOTED_IDENTIFIER-Option in der aktuellen Sitzung auf ON festgelegt sein.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).

FILESTREAM_ON { partition_scheme_name | filegroup | " default " }FILESTREAM_ON { partition_scheme_name | filegroup | " default " }

Gilt für: SQL ServerSQL Server.Applies to: SQL ServerSQL Server. Die Azure SQL-Datenbank bietet keine Unterstützung für FILESTREAM.Azure SQL Database does not support FILESTREAM.

Gibt die Dateigruppe für FILESTREAM-Daten an.Specifies the filegroup for FILESTREAM data.

Wenn die Tabelle FILESTREAM-Daten enthält und partitioniert ist, muss die FILESTREAM_ON-Klausel eingeschlossen werden und ein Partitionsschema von FILESTREAM-Dateigruppen angeben.If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. Dieses Partitionsschema muss die gleiche Partitionsfunktion und die gleichen Partitionsspalten wie das Partitionsschema der Tabelle verwenden. Andernfalls wird ein Fehler ausgelöst.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

Wenn die Tabelle nicht partitioniert ist, kann die FILESTREAM-Spalte nicht partitioniert werden.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Die FILESTREAM-Daten für die Tabelle müssen in einer einzigen Dateigruppe gespeichert werden.FILESTREAM data for the table must be stored in a single filegroup. Diese Dateigruppe wird in der FILESTREAM_ON-Klausel angegeben.This filegroup is specified in the FILESTREAM_ON clause.

Wenn die Tabelle nicht partitioniert und die FILESTREAM_ON-Klausel nicht angegeben ist, wird die FILESTREAM-Dateigruppe mit dem DEFAULT-Eigenschaftensatz verwendet.If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. Wenn keine FILESTREAM-Dateigruppe vorhanden ist, wird ein Fehler ausgelöst.If there is no FILESTREAM filegroup, an error is raised.

  • Wie auch bei ON und TEXTIMAGE_ON kann der mit CREATE TABLE für FILESTREAM_ON festgelegte Wert nur in den folgenden Fällen geändert werden:As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • Eine CREATE INDEX-Anweisung konvertiert einen Heap in einen gruppierten Index.A CREATE INDEX statement converts a heap into a clustered index. In diesem Fall kann eine andere FILESTREAM-Dateigruppe, ein anderes Partitionsschema oder NULL angegeben werden.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.

  • Eine DROP INDEX-Anweisung konvertiert einen gruppierten Index in einen Heap.A DROP INDEX statement converts a clustered index into a heap. In diesem Fall können eine andere FILESTREAM-Dateigruppe, ein anderes Partitionsschema oder " default " angegeben werden.In this case, a different FILESTREAM filegroup, partition scheme, or " default " can be specified.

    Für die Dateigruppe in der Klausel FILESTREAM_ON <filegroup> bzw. für die einzelnen FILESTREAM-Dateigruppen im Partitionsschema muss jeweils eine Datei definiert sein.The filegroup in the FILESTREAM_ON <filegroup> clause, or each FILESTREAM filegroup that is named in the partition scheme, must have one file defined for the filegroup. Diese Datei muss mit einer CREATE DATABASE- oder ALTER DATABASE-Anweisung definiert werden, andernfalls wird ein Fehler ausgelöst.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

    Verwandte Themen zu FILESTREAM finden Sie unter Binary Large Object (Blob)-Daten (SQL Server).For related FILESTREAM topics, see Binary Large Object (Blob) Data (SQL Server).

    [ type_schema_name.[ type_schema_name. ] type_name] type_name
    Gibt den Datentyp der Spalte sowie das Schema an, zu dem er gehört.Specifies the data type of the column, and the schema to which it belongs. Für datenträgerbasierte Tabellen kann der Datentyp einer der folgenden sein:For disk-based tables, the data type can be one of the following:

  • SystemdatentypA system data type.

  • Ein Aliastyp, der auf einem SQL ServerSQL Server-Systemdatentyp basiert.An alias 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. Die NULL- oder NOT NULL-Zuweisung für einen Aliasdatentyp lässt sich durch die entsprechende Angabe in einer CREATE TABLE-Anweisung überschreiben.The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. Die Längenangabe kann jedoch nicht geändert werden; die Länge eines Aliasdatentyps kann nicht in einer CREATE TABLE-Anweisung angegeben werden.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.

  • Ein CLR-benutzerdefinierter Typ.A CLR user-defined type. CLR-benutzerdefinierte Typen werden mit der CREATE TYPE-Anweisung erstellt, bevor sie in einer Tabellendefinition verwendet werden können.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. Zum Erstellen einer Spalte, die auf einem CLR-benutzerdefinierten Typ basiert, ist die REFERENCES-Berechtigung für den Typ erforderlich.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

    Wenn type_schema_name nicht angegeben ist, verweist SQL Server-Datenbank-EngineSQL Server Database Engine auf type_name in der folgenden Reihenfolge:If type_schema_name is not specified, the SQL Server-Datenbank-EngineSQL Server Database Engine references type_name in the following order:

  • SQL ServerSQL Server-Systemdatentyp.The SQL ServerSQL Server system data type.

  • Das Standardschema des aktuellen Benutzers in der aktuellen DatenbankThe default schema of the current user in the current database.

  • Das dbo -Schema in der aktuellen DatenbankThe dbo schema in the current database.

    Eine Liste unterstützter Systemtypen für speicheroptimierte Tabellen finden Sie unter Unterstützte Datentypen für In-Memory OLTP.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

    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 Genauigkeit, Dezimalstellen und Länge.For more information about valid precision values, see Precision, Scale, and Length.

    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 Genauigkeit, Dezimalstellen und Länge.For more information about valid scale values, see Precision, Scale, and Length.

    maxmax
    Gilt nur für die Datentypen varchar, nvarchar und varbinary zum Speichern von 2^31 Byte an Zeichen- und Binärdaten sowie von 2^30 Byte an Unicode-Daten.Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

    CONTENTCONTENT
    Gibt an, dass jede Instanz des XML-Datentyps in column_name mehrere allgemeine Elemente enthalten kann.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT gilt nur für den xml-Datentyp und kann nur angegeben werden, wenn xml_schema_collection ebenfalls angegeben ist.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. Wird der Parameter nicht angegeben, entspricht CONTENT dem Standardverhalten.If not specified, CONTENT is the default behavior.

    DOCUMENTDOCUMENT
    Gibt an, dass jede Instanz des XML-Datentyps in column_name nur ein allgemeines Element enthalten kann.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT gilt nur für den XML-Datentyp und kann angegeben werden, wenn xml_schema_collection ebenfalls angegeben ist.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

    xml_schema_collectionxml_schema_collection
    Gilt nur für den xml-Datentyp zum Verknüpfen einer XML-Schemaauflistung mit diesem Typ.Applies only to the xml data type for associating an XML schema collection with the type. Vor der Typisierung einer xml-Spalte mit einem Schema muss das Schema zuerst mithilfe von CREATE XML SCHEMA COLLECTION in der Datenbank erstellt werden.Before typing an xml column to a schema, the schema must first be created in the database by using CREATE XML SCHEMA COLLECTION.

    DEFAULTDEFAULT
    Gibt den Wert an, der für die Spalte bereitgestellt wird, wenn kein Wert explizit angegeben wurde.Specifies the value provided for the column when a value is not explicitly supplied during an insert. DEFAULT-Definitionen können auf alle Spalten angewendet werden, mit Ausnahme der als timestamp definierten Spalten sowie von Spalten mit der IDENTITY-Eigenschaft.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. Wenn ein Standardwert für einen benutzerdefinierten Spaltentyp angegeben wird, sollte dieser Typ eine implizite Konvertierung von constant_expression in den benutzerdefinierten Typ unterstützen.If a default value is specified for a user-defined type column, the type should support an implicit conversion from constant_expression to the user-defined type. DEFAULT-Definitionen werden entfernt, wenn die Tabelle gelöscht wird.DEFAULT definitions are removed when the table is dropped. Es kann nur ein konstanter Wert (z. B. eine Zeichenfolge), eine Skalarfunktion (entweder eine System-, eine benutzerdefinierte oder eine CLR-Funktion) oder NULL als Standardwert verwendet werden.Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. Um die Kompatibilität mit früheren Versionen von SQL ServerSQL Server aufrechtzuerhalten, ist es möglich, einer DEFAULT-Definition einen Einschränkungsnamen zuzuweisen.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

    constant_expressionconstant_expression
    Eine Konstante, ein NULL-Wert oder eine Systemfunktion, die bzw. der als Standardwert für die Spalte verwendet wird.Is a constant, NULL, or a system function that is used as the default value for the column.

    memory_optimized_constant_expressionmemory_optimized_constant_expression
    Eine Konstante, ein NULL-Wert oder eine Systemfunktion, die bzw. der als Standardwert für die Spalte verwendet wird.Is a constant, NULL, or a system function that is supported in used as the default value for the column. Muss in systemintern kompilierten gespeicherten Prozeduren unterstützt werden.Must be supported in natively compiled stored procedures. Weitere Informationen zu den integrierten Features in nativ kompilierten gespeicherten Prozeduren finden Sie unter Unterstützte Features für nativ kompilierte T-SQL-Module.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

    IDENTITYIDENTITY
    Gibt an, dass es sich bei der neuen Spalte um eine Identitätsspalte handelt.Indicates that the new column is an identity column. Wenn eine neue Zeile zur Tabelle hinzugefügt wird, stellt Datenbank-EngineDatabase Engine einen eindeutigen, inkrementellen Wert für die Spalte bereit.When a new row is added to the table, the Datenbank-EngineDatabase Engine provides a unique, incremental value for the column. Identitätsspalten werden üblicherweise zusammen mit PRIMARY KEY-Einschränkungen verwendet, um als eindeutiger Zeilenbezeichner für die Tabelle zu dienen.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. Die IDENTITY-Eigenschaft kann folgenden Spalten zugewiesen werden: tinyint, smallint, int, bigint, decimal(p,0) oder numeric(p,0).The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. Es kann nur eine Identitätsspalte pro Tabelle erstellt werden.Only one identity column can be created per table. Gebundene Standardwerte und DEFAULT-Einschränkungen können nicht mit einer Identitätsspalte verwendet werden.Bound defaults and DEFAULT constraints cannot be used with an identity column. Entweder müssen sowohl Ausgangswert als auch Schrittweite oder keines von beiden angegeben werden.Both the seed and increment or neither must be specified. Wurden Ausgangswert und inkrementeller Wert nicht angegeben, ist der Standardwert (1,1).If neither is specified, the default is (1,1).

    In einer speicheroptimierten Tabelle lautet der einzig zulässige Wert sowohl für seed als auch für increment 1. (1,1) ist der Standardwert für seed und increment.In a memory-optimized table, the only allowed value for both seed and increment is 1; (1,1) is the default for seed and increment.

    seedseed
    Der Wert, der für die erste in die Tabelle geladene Zeile verwendet wird.Is the value used for the very first row loaded into the table.

    incrementincrement
    Der Inkrementwert, der zum Identitätswert der zuvor geladenen Zeile addiert wird.Is the incremental value added to the identity value of the previous row loaded.

    NOT FOR REPLICATIONNOT FOR REPLICATION
    In der CREATE TABLE-Anweisung kann die NOT FOR REPLICATION-Klausel für die IDENTITY-Eigenschaft, für FOREIGN KEY-Einschränkungen und für CHECK-Einschränkungen angegeben werden.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. Wenn diese Klausel für die IDENTITY-Eigenschaft angegeben wird, werden Werte in Identitätsspalten nicht inkrementiert, wenn Replikations-Agents Einfügevorgänge ausführen.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. Wenn diese Klausel für eine Einschränkung angegeben wird, wird die Einschränkung nicht erzwungen, wenn Replikations-Agents Einfüge-, Update- oder Löschvorgänge ausführen.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

    GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]

    Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

    Gibt an, dass eine angegebene datetime2-Spalte vom System verwendet wird, um entweder die Startzeit oder die Endzeit aufzuzeichnen, für die ein Datensatz gültig ist.Specifies that a specified datetime2 column will be used by the system to record either the start time for which a record is valid or the end time for which a record is valid. Die Spalte muss als NOT NULL definiert werden.The column must be defined as NOT NULL. Das System löst einen Fehler aus, wenn Sie versuchen, NULL anzugeben.If you attempt to specify them as NULL, the system will throw an error. Wenn Sie NOT NULL nicht explizit für eine Zeitraumspalte angeben, definiert das System die Spalte standardmäßig als NOT NULL.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. Verwenden Sie dieses Argument zusammen mit den Argumenten PERIOD FOR SYSTEM_TIME und WITH SYSTEM_VERSIONING = ON, um die Versionsverwaltung durch das System für eine Tabelle zu aktivieren.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Weitere Informationen finden Sie unter Temporal Tables.For more information, see Temporal Tables.

    Sie können eine oder beide Zeitraumspalten mit dem Flag HIDDEN kennzeichnen, um diese Spalten implizit auszublenden, sodass SELECT * FROM<table> für diese Spalten keinen Wert zurückgibt.You can 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 sind Zeitraumspalten nicht ausgeblendet.By default, period columns are not hidden. Damit sie verwendet werden können, 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. Zum Ändern des Attributs HIDDEN einer vorhandenen Zeitraumspalte, muss PERIOD gelöscht und mit einem anderen Flag neu erstellt werden.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

    INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass ein Index in der Tabelle erstellt werden soll.Specifies to create an index on the table. Dies kann ein gruppierter oder ein nicht gruppierter Index sein.This can be a clustered index, or a nonclustered index. Der Index enthält die aufgelisteten Spalten und sortiert die Daten in aufsteigender oder absteigender Reihenfolge.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTOREINDEX index_name CLUSTERED COLUMNSTORE

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass die gesamte Tabelle im Spaltenformat mit einem Columnstore-Index gespeichert werden soll.Specifies to store the entire table in columnar format with a clustered columnstore index. Dies beinhaltet immer alle Spalten in der Tabelle.This always includes all columns in the table. Die Daten werden nicht in alphabetischer oder numerischer Reihenfolge sortiert, da die Zeilen zugunsten der Vorteile der Columnstore-Komprimierung organisiert sind.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass ein nicht gruppierter Columnstore-Index in der Tabelle erstellt werden soll.Specifies to create a nonclustered columnstore index on the table. Die zugrunde liegende Tabelle kann ein Rowstore-Heap, gruppierter Index oder gruppierter Columnstore-Index sein.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. Eine zweite Kopie der Daten für die Spalten im Index wird immer gespeichert, wenn ein nicht gruppierter Columnstore-Index erstellt wird.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

Der nicht gruppierte Columnstore-Index wird als gruppierter Columnstore-Index gespeichert und verwaltet.The nonclustered columnstore index is stored and managed as a clustered columnstore index. Er wird „nicht gruppierter Columnstore-Index“ genannt, da er als sekundärer Index in einer Tabelle fungiert und seine Spalten begrenzt sein können.It is called a nonclustered columnstore index to because the columns can be limited and it exists as a secondary index on a table.

ON partition_scheme_name(column_name)ON partition_scheme_name(column_name)
Gibt das Partitionsschema an, das die Dateigruppen definiert, denen die Partitionen eines partitionierten Index zugeordnet werden.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. Das Partitionsschema muss bereits durch Ausführen von CREATE PARTITION SCHEME oder ALTER PARTITION SCHEME in der Datenbank vorhanden sein.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name gibt die Spalte an, auf deren Grundlage ein partitionierter Index partitioniert wird.column_name specifies the column against which a partitioned index will be partitioned. Diese Spalte muss mit dem Datentyp, der Länge und der Genauigkeit des Arguments der Partitionsfunktion übereinstimmen, die partition_scheme_name verwendet.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. column_name ist nicht auf Spalten in der Indexdefinition beschränkt.column_name is not restricted to the columns in the index definition. Es können beliebige Spalten der Basistabelle angegeben werden, mit der Ausnahme, dass column_name beim Partitionieren von UNIQUE-Indizes aus den Spalten ausgewählt werden muss, die als eindeutige Schlüssel verwendet werden.Any column in the base table can be specified, except when partitioning a UNIQUE index, column_name must be chosen from among those used as the unique key. Mit dieser Einschränkung kann Datenbank-EngineDatabase Engine die Eindeutigkeit der Schlüsselwerte in nur einer einzigen Partition überprüfen.This restriction allows the Datenbank-EngineDatabase Engine to verify uniqueness of key values within a single partition only.

Hinweis

Beim Partitionieren eines nicht eindeutigen gruppierten Index fügt Datenbank-EngineDatabase Engine standardmäßig die Partitionierungsspalte zu der Liste der gruppierten Indexschlüssel hinzu, sofern sie dort noch nicht angegeben wurde.When you partition a non-unique, clustered index, the Datenbank-EngineDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. Beim Partitionieren eines nicht eindeutigen, nicht gruppierten Indexes fügt Datenbank-EngineDatabase Engine die Partitionierungsspalte als (eingeschlossene) Nichtschlüsselspalte des Indexes hinzu, sofern sie noch nicht angegeben wurde.When partitioning a non-unique, nonclustered index, the Datenbank-EngineDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

Wenn partition_scheme_name oder filegroup bei einer partitionierten Tabelle nicht angegeben werden, wird der Index in demselben Partitionsschema platziert und verwendet dieselbe Partitionierungsspalte wie die zugrunde liegende Tabelle.If partition_scheme_name or filegroup is not specified and the table is partitioned, the index is placed in the same partition scheme, using the same partitioning column, as the underlying table.

Hinweis

Sie können kein Partitionierungsschema für einen XML-Index angeben.You cannot specify a partitioning scheme on an XML index. Beim Partitionieren der Basistabelle verwendet der XML-Index dasselbe Partitionsschema wie die Tabelle.If the base table is partitioned, the XML index uses the same partition scheme as the table.

Weitere Informationen zur Partitionierung von Indizes finden Sie unter Partitionierte Tabellen und Indizes.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_nameON filegroup_name
Erstellt den angegebenen Index für die angegebene Dateigruppe.Creates the specified index on the specified filegroup. Wenn kein Speicherort angegeben und die Tabelle oder Sicht nicht partitioniert ist, verwendet der Index dieselbe Dateigruppe wie die zugrunde liegende Tabelle oder Sicht.If no location is specified and the table or view is not partitioned, the index uses the same filegroup as the underlying table or view. Die Dateigruppe muss bereits vorhanden sein.The filegroup must already exist.

ON " default "ON " default "
Erstellt den angegebenen Index für die Standarddateigruppe.Creates the specified index on the default filegroup.

Die Benennung default ist in diesem Kontext kein Schlüsselwort.The term default, in this context, is not a keyword. Es handelt sich dabei um einen Bezeichner für die Standarddateigruppe. Dieser muss wie in ON " default " or ON [ default ] durch Trennzeichen getrennt werden.It is an identifier for the default filegroup and must be delimited, as in ON " default " or ON [ default ]. Wenn "default" angegeben wird, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt sein.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).

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

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

Gibt die Platzierung der FILESTREAM-Daten für die Tabelle an, wenn ein gruppierter Index erstellt wird.Specifies the placement of FILESTREAM data for the table when a clustered index is created. Die FILESTREAM_ON-Klausel lässt zu, dass FILESTREAM-Daten in eine andere FILESTREAM-Dateigruppe oder ein anderes Partitionsschema verschoben werden.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name ist der Name einer FILESTREAM-Dateigruppe.filestream_filegroup_name is the name of a FILESTREAM filegroup. Für die Dateigruppe muss eine Datei mit einer CREATE DATABASE-Anweisung oder einer ALTER DATABASE-Anweisung definiert worden sein, andernfalls wird ein Fehler ausgelöst.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

Wenn die Tabelle partitioniert ist, muss die FILESTREAM_ON-Klausel eingeschlossen werden und ein Partitionsschema von FILESTREAM-Dateigruppen angeben, das die gleiche Partitionsfunktion und die gleichen Partitionsspalten wie das Partitionsschema der Tabelle enthält.If the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups that uses the same partition function and partition columns as the partition scheme for the table. Andernfalls wird ein Fehler ausgelöst.Otherwise, an error is raised.

Wenn die Tabelle nicht partitioniert ist, kann die FILESTREAM-Spalte nicht partitioniert werden.If the table is not partitioned, the FILESTREAM column cannot be partitioned. Die FILESTREAM-Daten für die Tabelle müssen in einer einzigen Dateigruppe gespeichert werden, die in der FILESTREAM_ON-Klausel angegeben wird.FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

FILESTREAM_ON NULL kann in einer CREATE INDEX-Anweisung angegeben werden, wenn ein gruppierter Index erstellt wird und die Tabelle keine FILESTREAM-Spalte enthält.FILESTREAM_ON NULL can be specified in a CREATE INDEX statement if a clustered index is being created and the table does not contain a FILESTREAM column.

Weitere Informationen finden Sie unter FILESTREAM (SQL Server).For more information, see FILESTREAM (SQL Server).

ROWGUIDCOLROWGUIDCOL
Gibt an, dass die neue Spalte eine Spalte mit Zeilen-GUIDs ist.Indicates that the new column is a row GUID column. Nur eine uniqueidentifier-Spalte pro Tabelle kann als ROWGUIDCOL-Spalte gekennzeichnet werden.Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. Nach der Anwendung der ROWGUIDCOL-Eigenschaft kann mit $ROWGUID auf die Spalte verwiesen werden.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. Die ROWGUIDCOL-Eigenschaft kann nur einer uniqueidentifier-Spalte zugewiesen werden.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. Spalten eines benutzerdefinierten Datentyps können nicht mit ROWGUIDCOL gekennzeichnet werden.User-defined data type columns cannot be designated with ROWGUIDCOL.

Die ROWGUIDCOL-Eigenschaft erzwingt keine Eindeutigkeit der in der Spalte gespeicherten Werte.The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. ROWGUIDCOL erzeugt auch nicht automatisch Werte für neue Zeilen, die in die Tabelle eingefügt werden.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. Zum Generieren eindeutiger Werte für jede Spalte verwenden Sie entweder die Funktion NEWID oder NEWSEQUENTIALID in INSERT-Anweisungen, oder verwenden Sie diese Funktionen als Standardwert für die Spalte.To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements or use these functions as the default for the column.

ENCRYPTED WITHENCRYPTED WITH
Gibt Verschlüsselungsspalten mit dem Feature Always Encrypted an.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_nameCOLUMN_ENCRYPTION_KEY = key_name
Gibt Spaltenverschlüsselungsschlüssel an.Specifies the column encryption key. Weitere Informationen finden Sie unter CREATE COLUMN ENCRYPTION KEY (Transact-SQL).For more information, see CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
Diedeterministische Verschlüsselung verwendet eine Methode, die immer denselben verschlüsselten Wert für jeden angegebenen Klartextwert generiert.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. Die Verwendung der deterministischen Verschlüsselung ermöglicht die Suche mit einer Gleichheitsüberprüfung, das Gruppieren und das Verknüpfen von Tabellen mit Gleichheitsjoins, basierend auf verschlüsselten Werten. Jedoch erlaubt sie nicht autorisierten Benutzern möglicherweise, Informationen zu verschlüsselten Werten zu erraten, indem sie die Muster in den verschlüsselten Spalten untersuchen.Using deterministic encryption allows searching using equality comparison, grouping, and joining tables using equality joins based on encrypted values, but can also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column. Das Verknüpfen zweier Tabellen mit deterministisch verschlüsselten Spalten ist nur möglich, wenn die Spalten mit demselben Spaltenverschlüsselungsschlüssel verschlüsselt sind.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. Die deterministische Verschlüsselung muss eine Spaltensortierung mit einer binary2-Sortierreihenfolge für Zeichenspalten verwenden.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

Diezufällige Verschlüsselung verwendet eine Methode, die Daten in einer weniger vorhersagbaren Weise verschlüsselt.Randomized encryption uses a method that encrypts data in a less predictable manner. Die Verschlüsselung nach dem Zufallsprinzip ist zwar sicherer, verhindert jedoch jegliche Berechnungen und Indizierungen in verschlüsselten Spalten, es sei denn, Ihre SQL Server-Instanz unterstützt Always Encrypted mit Secure Enclaves.Randomized encryption is more secure, but it prevents any computations and indexing on encrypted columns, unless your SQL Server instance supports Always Encrypted with secure enclaves. Weitere Einzelheiten finden Sie unter Always Encrypted mit Secure Enclaves.Please see Always Encrypted with secure enclaves for details.

Wenn Sie Always Encrypted (ohne Secure Enclaves) verwenden, verwenden Sie die deterministische Verschlüsselung für Spalten, die mit Parametern oder Gruppierungsparametern durchsucht werden sollen (z. B. eine Behörden-ID-Nummer).If you are using Always Encrypted (without secure enclaves), use deterministic encryption for columns that will be searched with parameters or grouping parameters, for example a government ID number. Verwenden Sie die zufällige Datenverschlüsselung für Daten (z. B. Kreditkartennummern), die nicht mit anderen Datensätzen gruppiert oder in Jointabellen verwendet werden und nach denen nicht gesucht wird, wenn andere Spalten verwendet werden (z. B. Transaktionsnummern), um die Zeile zu suchen, die die betreffende verschlüsselte Spalte enthält.Use randomized encryption, for data such as a credit card number, which is not grouped with other records or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

Wenn Sie Always Encrypted mit Secure Enclaves verwenden, wird eine Verschlüsselung nach dem Zufallsprinzip empfohlen.If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

Spalten müssen einen qualifizierenden Datentyp aufweisen.Columns must be of a qualifying data type.

ALGORITHMALGORITHM

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

Muss 'AEAD_AES_256_CBC_HMAC_SHA_256' sein.Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Weitere Informationen einschließlich Featureeinschränkungen finden Sie unter Always Encrypted (Datenbank-Engine).For more information including feature constraints, see Always Encrypted (Database Engine).

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. Weitere Einschränkungen und Informationen zu Sparsespalten finden Sie unter Verwenden von Sparsespalten.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

Gibt eine dynamische Datenmaske an.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 Optionen stehen zur Verfügung:Three functions are available:

  • default()default()

  • email()email()

  • partial()partial()

  • random()random()

    Weitere Informationen zu Funktionsparametern finden Sie im Artikel zur dynamischen Datenmaskierung.For function parameters, see Dynamic Data Masking.

    FILESTREAMFILESTREAM

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

Gilt nur für varbinary(max)-Spalten.Valid only for varbinary(max) columns. Gibt den FILESTREAM-Speicher für die varbinary(max)-BLOB-Daten an.Specifies FILESTREAM storage for the varbinary(max) BLOB data.

Die Tabelle muss auch eine Spalte mit dem Datentyp uniqueidentifier aufweisen, der das ROWGUIDCOL-Attribut enthält.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. Diese Spalte darf keine NULL-Werte zulassen und muss eine UNIQUE- oder eine PRIMARY KEY-Einschränkung für einzelne Spalten enthalten.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. Der GUID-Wert für die Spalte muss entweder beim Einfügen von Daten von einer Anwendung oder durch eine DEFAULT-Einschränkung mit der NEWID ()-Funktion bereitgestellt werden.The GUID value for the column must be supplied either by an application when inserting data, or by a DEFAULT constraint that uses the NEWID () function.

Die Spalte ROWGUIDCOL kann nicht gelöscht, und die zugehörigen Einschränkungen können nicht geändert werden, wenn für die Tabelle eine FILESTREAM-Spalte definiert ist.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. Die Spalte ROWGUIDCOL kann nur gelöscht werden, nachdem die letzte FILESTREAM-Spalte gelöscht wurde.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

Wenn das FILESTREAM-Speicherattribut für eine Spalte angegeben wird, werden alle Werte dieser Spalte in einem FILESTREAM-Datencontainer des Dateisystems gespeichert.When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

COLLATE collation_nameCOLLATE collation_name
Gibt die Sortierung für die Spalte an.Specifies the collation for the column. 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 an SQL collation name. collation_name ist nur für Spalten mit den folgenden Datentypen anwendbar: char, varchar, text, nchar, nvarchar und ntext.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. Wenn collation_name nicht angegeben ist, wird der Spalte die Sortierung des benutzerdefinierten Datentyps zugewiesen, wenn es sich um eine Spalte von einem benutzerdefinierten Datentyp handelt, oder es wird die Standardsortierung der Datenbank zugewiesen.If not specified, the column is assigned either the collation of the user-defined data type, if the column is of a user-defined data type, or the default collation of the database.

Weitere Informationen zu den Windows- und SQL-Sortierungsnamen finden Sie unter Name der Windows-Sortierung und SQL Server-Sortierungsname.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

Weitere Informationen zur COLLATE-Klausel finden Sie unter COLLATE (Transact-SQL).For more information about the COLLATE clause, see COLLATE (Transact-SQL).

CONSTRAINTCONSTRAINT
Ein optionales Schlüsselwort, das den Anfang der Definition einer PRIMARY KEY-, NOT NULL-, UNIQUE-, FOREIGN KEY- oder CHECK-Einschränkung anzeigt.Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_nameconstraint_name
Der Name einer Einschränkung.Is the name of a constraint. Einschränkungsnamen müssen innerhalb des Schemas, zu dem die Tabelle gehört, eindeutig sein.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
Bestimmt, ob NULL-Werte in der Spalte zulässig sind.Determine whether null values are allowed in the column. NULL ist genau genommen keine Einschränkung, kann jedoch wie NOT NULL verwendet werden.NULL is not strictly a constraint but can be specified just like NOT NULL. 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.

PRIMARY KEYPRIMARY KEY
Eine Einschränkung, die die Entitätsintegrität für eine bestimmte Spalte (oder Spalten) durch einen eindeutigen Index erzwingt.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. Es kann nur eine PRIMARY KEY-Einschränkung pro Tabelle erstellt werden.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
Eine Einschränkung, die Entitätsintegrität für eine angegebene Spalte (oder Spalten) durch einen eindeutigen Index bereitstellt.Is a constraint that provides entity integrity for a specified column or columns through a unique index. Eine Tabelle kann mehrere UNIQUE-Einschränkungen haben.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
Gibt an, dass ein gruppierter oder nicht gruppierter Index für die PRIMARY KEY- oder UNIQUE-Einschränkung erstellt wird.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. Für PRIMARY KEY-Einschränkungen wird standardmäßig CLUSTERED verwendet; für UNIQUE-Einschränkungen wird standardmäßig NONCLUSTERED verwendet.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

In einer CREATE TABLE-Anweisung kann CLUSTERED nur für eine einzige Einschränkung angegeben werden.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. Wenn Sie CLUSTERED für eine UNIQUE-Einschränkung angeben und außerdem eine PRIMARY KEY-Einschränkung angeben, wird für PRIMARY KEY standardmäßig NONCLUSTERED verwendet.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

Im Folgenden wird gezeigt, wie NONCLUSTERED in einer datenträgerbasierten Tabelle verwendet wird:The following shows how to use NONCLUSTERED in a disk-based table:

CREATE TABLE t1 ( c1 int, INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t2( c1 int INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t3( c1 int, c2 int INDEX ix_1 NONCLUSTERED)   
CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED (c1,c2))  

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
Eine Einschränkung, die referenzielle Integrität für die Daten in der Spalte oder den Spalten bereitstellt.Is a constraint that provides referential integrity for the data in the column or columns. FOREIGN KEY-Einschränkungen erfordern, dass jeder Wert in der Spalte in den entsprechenden Spalten, auf die verwiesen wird, in der Tabelle, auf die verwiesen wird, vorhanden ist.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. FOREIGN KEY-Einschränkungen können nur auf Spalten verweisen, die PRIMARY KEY- oder UNIQUE-Einschränkungen in der Tabelle sind, auf die verwiesen wird; oder auf Spalten, auf die in einer UNIQUE INDEX-Einschränkung in der Tabelle, auf die verwiesen wird, verwiesen wird.FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table or columns referenced in a UNIQUE INDEX on the referenced table. Fremdschlüssel für berechnete Spalten müssen auch als PERSISTED markiert werden.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name.] referenced_table_name][ schema_name.] referenced_table_name]
Der Name der Tabelle, auf die in der FOREIGN KEY-Einschränkung verwiesen wird, sowie das Schema, zu dem sie gehört.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ ,... n ] )( ref_column [ ,... n ] )
Eine Spalte oder Liste von Spalten aus der Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Gibt an, welche Aktion für Zeilen in der erstellten Tabelle ausgeführt werden soll, wenn diese Zeilen eine referenzielle Beziehung aufweisen und die Zeile, auf die verwiesen wird, aus der übergeordneten Tabelle gelöscht wird.Specifies what action happens to rows in the table created, if those rows have a referential relationship and the referenced row is deleted from the parent table. Der Standardwert ist NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Datenbank-EngineDatabase Engine löst einen Fehler aus, und für die Aktion zum Löschen der Zeile in der übergeordneten Tabelle wird ein Rollback ausgeführt.The Datenbank-EngineDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
Wenn diese Zeile aus der übergeordneten Tabelle gelöscht wird, werden die entsprechenden Zeilen aus der verweisenden Tabelle gelöscht.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
Alle Werte, aus denen sich der Fremdschlüssel zusammensetzt, werden auf NULL festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle gelöscht wird.All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, um diese Einschränkung auszuführen.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Alle Werte, aus denen sich der Fremdschlüssel zusammensetzt, werden auf ihre Standardwerte festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle gelöscht wird.All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. Alle Fremdschlüsselspalten müssen Standarddefinitionen aufweisen, damit diese Einschränkung ausgeführt wird.For this constraint to execute, all foreign key columns must have default definitions. Wenn eine Spalte NULL-Werte zulässt, und es ist kein expliziter Standardwert festgelegt, wird NULL als der implizite Standardwert für die Spalte verwendet.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergeveröffentlichung einbezogen werden soll, bei der logische Datensätze verwendet werden.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON DELETE CASCADE kann nicht definiert werden, wenn für ON DELETE bereits ein INSTEAD OF-Trigger für die Tabelle vorhanden ist.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

In der Datenbank AdventureWorks2012AdventureWorks2012 verfügt die Tabelle ProductVendor beispielsweise über eine referenzielle Beziehung zu der Tabelle Vendor.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. Der Fremdschlüssel ProductVendor.BusinessEntityID verweist auf den Primärschlüssel Vendor.BusinessEntityID.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Wenn eine DELETE-Anweisung für eine Zeile in der Tabelle Vendor ausgeführt wird, und eine ON DELETE CASCADE-Aktion für ProductVendor.BusinessEntityID festgelegt ist, sucht Datenbank-EngineDatabase Engine nach mindestens einer abhängigen Zeile in der Tabelle ProductVendor.If a DELETE statement is executed on a row in the Vendor table, and an ON DELETE CASCADE action is specified for ProductVendor.BusinessEntityID, the Datenbank-EngineDatabase Engine checks for one or more dependent rows in the ProductVendor table. Falls eine solche Zeile vorhanden ist, werden die abhängigen Zeilen in der Tabelle ProductVendor sowie die Zeile, auf die in der Tabelle Vendor verwiesen wird, gelöscht.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

Ist hingegen NO ACTION angegeben, löst Datenbank-EngineDatabase Engine einen Fehler aus und führt ein Rollback für die Löschaktion der Vendor-Zeile aus, wenn in der ProductVendor-Tabelle mindestens eine Zeile vorhanden ist, die auf diese Zeile verweist.Conversely, if NO ACTION is specified, the Datenbank-EngineDatabase Engine raises an error and rolls back the delete action on the Vendor row if there is at least one row in the ProductVendor table that references it.

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
Gibt an, welche Aktion für eine Zeile der geänderten Tabelle ausgeführt werden soll, wenn diese Zeile eine referenzielle Beziehung hat und die Zeile, auf die verwiesen wird, in der übergeordneten Tabelle aktualisiert wird.Specifies what action happens to rows in the table altered when those rows have a referential relationship and the referenced row is updated in the parent table. Der Standardwert ist NO ACTION.The default is NO ACTION.

NO ACTIONNO ACTION
Datenbank-EngineDatabase Engine löst einen Fehler aus, und für die Updateaktion der Zeile in der übergeordneten Tabelle wird ein Rollback ausgeführt.The Datenbank-EngineDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
Wenn diese Zeile in der übergeordneten Tabelle aktualisiert wird, werden die entsprechenden Zeilen in der verweisenden Tabelle aktualisiert.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
Alle Werte, aus denen sich der Fremdschlüssel zusammensetzt, werden auf NULL festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle aktualisiert wird.All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. Die Fremdschlüsselspalten müssen NULL-Werte zulassen, um diese Einschränkung auszuführen.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
Alle Werte, aus denen sich der Fremdschlüssel zusammensetzt, werden auf die Standardwerte festgelegt, wenn die entsprechende Zeile in der übergeordneten Tabelle aktualisiert wird.All the values that make up the foreign key are set to their default values when the corresponding row in the parent table is updated. Alle Fremdschlüsselspalten müssen Standarddefinitionen aufweisen, damit diese Einschränkung ausgeführt wird.For this constraint to execute, all foreign key columns must have default definitions. Wenn eine Spalte NULL-Werte zulässt, und es ist kein expliziter Standardwert festgelegt, wird NULL als der implizite Standardwert für die Spalte verwendet.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergeveröffentlichung einbezogen werden soll, bei der logische Datensätze verwendet werden.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.For more information about logical records, see Group Changes to Related Rows with Logical Records.

ON UPDATE CASCADE, SET NULL oder SET DEFAULT können nicht definiert werden, wenn für ON UPDATE schon ein INSTEAD OF-Trigger für die Tabelle vorhanden ist, die geändert wird.ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

Beispielsweise verfügt die Tabelle ProductVendor in der Datenbank AdventureWorks2012AdventureWorks2012 über eine referenzielle Beziehung zu der Tabelle Vendor: Der Fremdschlüssel ProductVendor.BusinessEntity verweist auf den Primärschlüssel Vendor.BusinessEntityID.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Wenn eine UPDATE-Anweisung für eine Zeile in der Tabelle Vendor ausgeführt wird, und eine ON UPDATE CASCADE-Aktion für ProductVendor.BusinessEntityID festgelegt ist, sucht Datenbank-EngineDatabase Engine nach mindestens einer abhängigen Zeile in der Tabelle ProductVendor.If an UPDATE statement is executed on a row in the Vendor table, and an ON UPDATE CASCADE action is specified for ProductVendor.BusinessEntityID, the Datenbank-EngineDatabase Engine checks for one or more dependent rows in the ProductVendor table. Falls eine solche Zeile vorhanden ist, werden die abhängigen Zeilen in der Tabelle ProductVendor sowie die Zeile, auf die in der Tabelle Vendor verwiesen wird, aktualisiert.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

Ist hingegen NO ACTION angegeben, löst Datenbank-EngineDatabase Engine einen Fehler aus und führt für die Updateaktion der Vendor-Zeile ein Rollback aus, wenn in der ProductVendor-Tabelle mindestens eine Zeile vorhanden ist, die auf diese Zeile verweist.Conversely, if NO ACTION is specified, the Datenbank-EngineDatabase Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECKCHECK
Eine Einschränkung, die Domänenintegrität erzwingt, indem die möglichen Eingabewerte für eine oder mehrere Spalten beschränkt wird.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. CHECK-Einschränkungen für berechnete Spalten müssen auch als PERSISTED markiert werden.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expressionlogical_expression
Ein logischer Ausdruck, der TRUE oder FALSE zurückgibt.Is a logical expression that returns TRUE or FALSE. Aliasdatentypen können nicht Teil des Ausdrucks sein.Alias data types cannot be part of the expression.

columncolumn
Eine Spalte oder Liste von Spalten in Klammern, die in Tabelleneinschränkungen verwendet wird, um anzuzeigen, welche Spalten in der Einschränkungsdefinition verwendet werden.Is a column or list of columns, in parentheses, used in table constraints to indicate the columns used in the constraint definition.

[ ASC | DESC ][ ASC | DESC ]
Gibt die Reihenfolge an, in der die Spalte oder die Spalten, die in der Tabelleneinschränkung enthalten sind, sortiert werden.Specifies the order in which the column or columns participating in table constraints are sorted. Die Standardeinstellung ist ASC.The default is ASC.

partition_scheme_namepartition_scheme_name
Der Name des Partitionsschemas, das die Dateigruppen definiert, denen die Partitionen einer partitionierten Tabelle zugeordnet werden.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. Das Partitionsschema muss in der Datenbank vorhanden sein.The partition scheme must exist within the database.

[ partition_column_name.[ partition_column_name. ]]
Gibt die Spalte an, auf deren Grundlage eine partitionierte Tabelle partitioniert wird.Specifies the column against which a partitioned table will be partitioned. Die Spalte muss in Bezug auf Datentyp, Länge und Genauigkeit mit der Spalte übereinstimmen, die in partition_scheme_name verwendet wird.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. Berechnete Spalten, die in eine Partitionsfunktion einbezogen werden, müssen explizit als PERSISTED gekennzeichnet sein.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

Wichtig

Es wird empfohlen, NOT NULL für die Partitionierungsspalte von partitionierten Tabellen sowie von nicht partitionierten Tabellen anzugeben, die als Quelle oder Ziel für ALTER TABLE...SWITCH-Vorgänge fungieren.We recommend that you specify NOT NULL on the partitioning column of partitioned tables, and also nonpartitioned tables that are sources or targets of ALTER TABLE...SWITCH operations. Damit stellen Sie sicher, dass mit CHECK-Einschränkungen für Partitionierungsspalten keine Überprüfung auf NULL-Werte ausgeführt werden muss.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR =fillfactorWITH FILLFACTOR =fillfactor
Gibt an, wie weit das Datenbank-EngineDatabase Engine die einzelnen Indexseiten füllen soll, die zum Speichern der Indexdaten verwendet werden.Specifies how full the Datenbank-EngineDatabase Engine should make each index page that is used to store the index data. Vom Benutzer angegebene fillfactor-Werte können Zahlen von 1 bis 100 sein.User-specified fillfactor values can be from 1 through 100. Wenn kein Wert angegeben ist, lautet der Standardwert 0.If a value is not specified, the default is 0. Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.Fill factor values 0 and 100 are the same in all respects.

Wichtig

Das Verwenden von WITH FILLFACTOR = fillfactor als einzige Indexoption, die für die PRIMARY KEY- oder UNIQUE-Einschränkungen gilt, wird hier aus Gründen der Abwärtskompatibilität weiterhin dokumentiert. In zukünftigen Releases wird dies jedoch nicht mehr der Fall sein.Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
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. Weitere Informationen zu Spaltensätzen finden Sie unter Verwenden von Spaltensätzen.For more information about column sets, see Use Column Sets.

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 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt die Namen der Spalten an, die das System verwendet, 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. Verwenden Sie dieses Argument zusammen mit den Argumenten GENERATED ALWAYS AS ROW { START | END } und WITH SYSTEM_VERSIONING = ON, um die Versionsverwaltung durch das System für eine Tabelle zu aktivieren.Use this argument in conjunction with the GENERATED ALWAYS AS ROW { START | END } and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. Weitere Informationen finden Sie unter Temporal Tables.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Diese Verzögerung gibt bei einer speicheroptimierten Tabelle die minimale Anzahl von Minuten an, die eine Zeile in der Tabelle unverändert bleiben muss, bevor sie für die Komprimierung in den Columnstore-Index geeignet ist.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL Server wählt spezifische Zeilen für die Komprimierung gemäß dem Zeitpunkt der letzten Aktualisierung aus.SQL Server selects specific rows to compress according to their last update time. Wenn Zeilen innerhalb von zwei Stunden häufig geändert werden, können Sie beispielsweise „COMPRESSION_DELAY = 120 Minutes“ festlegen, um sicherzustellen, dass Zeilen vor dem Komprimieren aktualisiert wurden.For example, if rows are changing frequently during a two-hour period of time, you could set COMPRESSION_DELAY = 120 Minutes to ensure updates are completed before SQL Server compresses the row.

DELAY gibt bei einer datenträgerbasierten Tabelle die minimale Anzahl von Minuten an, die eine Deltazeilengruppe im Zustand CLOSED in der Delta-Zeilengruppe verbringen muss, bevor SQL Server sie in die komprimierte Zeilengruppe komprimieren kann.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL Server can compress it into the compressed rowgroup. Da Einfügungs- und Aktualisierungszeiten in datenträgerbasierten Tabellen nicht für einzelne Zeilen nachverfolgt werden, wird in SQL Server die Verzögerung auf Delta-Zeilengruppen im Zustand CLOSED angewendet.Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.

Der Standardwert ist 0 Minuten.The default is 0 minutes.

Empfehlungen zur Verwendung von COMPRESSION_DELAY finden Sie unter Erste Schritte mit Columnstore für operative Echtzeitanalyse.For recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

<table_option> ::= Gibt eine oder mehrere Tabellenoptionen an.< table_option> ::= Specifies one or more table options.

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

ROWROW
Die Tabelle oder die angegebenen Partitionen werden mit Zeilenkomprimierung komprimiert.Table or specified partitions are compressed by using row compression.

PAGEPAGE
Die Tabelle oder die angegebenen Partitionen werden mit Seitenkomprimierung komprimiert.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gilt nur für columnstore-Indizes, einschließlich nicht gruppierter und gruppierter columnstore-Indizes.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE gibt an, dass die Komprimierung mit der leistungsfähigsten Columnstore-Komprimierung ausgeführt werden soll.COLUMNSTORE specifies to compress with the most performant columnstore compression. Dies ist die gängige Methode.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gilt nur für columnstore-Indizes, einschließlich nicht gruppierter und gruppierter columnstore-Indizes.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. Durch COLUMNSTORE_ARCHIVE wird die Tabelle oder Partition weiter in eine geringere Größe komprimiert.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speichergröße 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 a smaller storage size and can afford more time for storage and retrieval.

Weitere Informationen zur Datenkomprimierung finden Sie unter Datenkomprimierung.For more information about compression, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
Gibt die Partitionen an, für die die DATA_COMPRESSION-Einstellung gilt.Specifies the partitions to which the DATA_COMPRESSION setting applies. Wenn die Tabelle nicht partitioniert ist, erzeugt das ON PARTITIONS-Argument einen Fehler.If the table is not partitioned, the ON PARTITIONS argument will generate an error. Wenn die ON PARTITIONS-Klausel nicht angegeben wird, gilt die DATA_COMPRESSION-Option für alle Partitionen einer partitionierten Tabelle.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression kann auf folgenden Weisen angegeben werden:partition_number_expression can be specified in the following ways:

  • Geben Sie die Partitionsnummer einer Partition an, beispielsweise: ON PARTITIONS (2).Provide the partition number of a partition, for example: ON PARTITIONS (2).

  • Geben Sie die Partitionsnummern mehrerer einzelner Partitionen durch Trennzeichen getrennt an, beispielsweise: ON PARTITIONS (1, 5).Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • Geben Sie sowohl Bereiche als auch einzelne Partitionen an, zum Beispiel: ON PARTITIONS (2, 4, 6 TO 8).Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

    Für <range> können durch das Wort TO getrennte Partitionsnummern angegeben werden, beispielsweise: ON PARTITIONS (6 TO 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

    Wenn Sie für verschiedene Partitionen unterschiedliche Datenkomprimierungstypen festlegen möchten, geben Sie die Option DATA_COMPRESSION mehrmals an, beispielsweise:To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

WITH   
(  
DATA_COMPRESSION = NONE ON PARTITIONS (1),   
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),   
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)  
)  

<index_option> ::=<index_option> ::=
Gibt eine oder mehrere Indexoptionen an.Specifies one or more index options. Eine vollständige Beschreibung dieser Optionen finden Sie unter CREATE INDEX (Transact-SQL).For a complete description of these options, see CREATE INDEX (Transact-SQL).

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
Bei der Einstellung ON wird der durch FILLFACTOR angegebene Prozentsatz des freien Speicherplatzes auf die Zwischenebenenseiten des Indexes angewendet.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. Wenn die Einstellung OFF verwendet wird oder kein FILLFACTOR-Wert angegeben wurde, werden die Zwischenebenenseiten fast bis zu ihrer Kapazitätsgrenze gefüllt, wobei ausreichend Speicherplatz für mindestens eine Zeile mit der maximal für diesen Index möglichen Größe frei bleibt; diese ergibt sich aus der Schlüsselmenge auf den Zwischenseiten.When OFF or a FILLFACTOR value it not specified, the intermediate level pages are filled to near capacity leaving enough space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages. Der Standardwert ist OFF.The default is OFF.

FILLFACTOR =fillfactorFILLFACTOR =fillfactor
Gibt einen Prozentsatz an, der anzeigt, wie weit Datenbank-EngineDatabase Engine die Blattebene jeder Indexseite während der Indexerstellung oder -änderung füllen soll.Specifies a percentage that indicates how full the Datenbank-EngineDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor muss ein ganzzahliger Wert zwischen 1 und 100 sein.fillfactor must be an integer value from 1 to 100. Die Standardeinstellung ist 0.The default is 0. Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Gibt die Fehlermeldung an, wenn ein Einfügevorgang versucht, doppelte Schlüsselwerte in einen eindeutigen Index einzufügen.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. Die IGNORE_DUP_KEY-Option gilt nur für Einfügevorgänge nach dem Erstellen oder Neuerstellen des Index.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. Beim Ausführen von CREATE INDEX, ALTER INDEX oder UPDATE hat die Option keine Auswirkungen.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. Der Standardwert ist OFF.The default is OFF.

ONON
Eine Warnmeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden.A warning message will occur when duplicate key values are inserted into a unique index. Es schlagen nur die Zeilen fehl, die gegen die Eindeutigkeitseinschränkung verstoßen.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Eine Fehlermeldung wird ausgegeben, wenn doppelte Schlüsselwerte in einen eindeutigen Index eingefügt werden.An error message will occur when duplicate key values are inserted into a unique index. Für den gesamten INSERT-Vorgang wird ein Rollback ausgeführt.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY kann für Indizes, die für eine Sicht erstellt werden, nicht eindeutige Indizes, XML-Indizes, räumliche und gefilterte Indizes nicht auf ON festgelegt werden.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Um IGNORE_DUP_KEY anzuzeigen, verwenden Sie sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

In abwärtskompatibler Syntax ist WITH IGNORE_DUP_KEY gleichwertig mit WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
Bei der Einstellung ON werden veraltete Indexstatistiken nicht automatisch neu berechnet.When ON, out-of-date index statistics are not automatically recomputed. Bei der Einstellung OFF sind automatische Statistikupdates aktiviert.When OFF, automatic statistics updating are enabled. Der Standardwert ist OFF.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
Bei der Einstellung ON sind Zeilensperren beim Zugriff auf den Index zulässig.When ON, row locks are allowed when you access the index. Das Datenbank-EngineDatabase Engine bestimmt, wann Zeilensperren verwendet werden.The Datenbank-EngineDatabase Engine determines when row locks are used. Bei OFF werden Zeilensperren nicht verwendet.When OFF, row locks are not used. Der Standardwert ist ON.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
Bei der Einstellung ON sind Seitensperren beim Zugriff auf den Index zulässig.When ON, page locks are allowed when you access the index. Das Datenbank-EngineDatabase Engine bestimmt, wann Seitensperren verwendet werden.The Datenbank-EngineDatabase Engine determines when page locks are used. Bei der Einstellung OFF werden Seitensperren nicht verwendet.When OFF, page locks are not used. Der Standardwert ist ON.The default is ON.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 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 unabhängig von den Sortiereinstellungen die Groß-/Kleinschreibung nicht beachtet.Uniqueness comparison is case-insensitive, regardless of collation settings. Wenn dieser Wert nicht angegeben ist, wird Name der Dateitabelle verwendet.If this value is not specified, the name of the filetable is used.

FILETABLE_COLLATE_FILENAME = { collation_name | database_default }FILETABLE_COLLATE_FILENAME = { collation_name | database_default }

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017. Die Azure SQL-Datenbank bietet keine Unterstützung für FILETABLE.Azure SQL Database does not support FILETABLE.

Gibt den Namen der Sortierung an, die auf die Name -Spalte in der FileTable angewendet werden soll.Specifies the name of the collation to be applied to the Name column in the FileTable. Zur Einhaltung der Windows-Dateinamensemantik darf bei der Sortierung die Groß-/Kleinschreibung nicht beachtet werden.The collation must be case-insensitive to comply with Windows file naming semantics. Wenn dieser Wert nicht angegeben ist, wird die Standardsortierung für die Datenbank verwendet.If this value is not specified, the database default collation is used. Wenn bei der Datenbank-Standardsortierung die Groß-/Kleinschreibung beachtet wird, wird ein Fehler ausgelöst, und der CREATE TABLE-Vorgang kann nicht durchgeführt werden.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_namecollation_name
Der Name einer Sortierung, bei der die Groß-/Kleinschreibung nicht beachtet wird.The name of a case-insensitive collation.

database_defaultdatabase_default
Gibt an, dass die Standardsortierung für die Datenbank verwendet werden soll.Specifies that the default collation for the database should be used. Bei dieser Sortierung darf die Groß-/Kleinschreibung nicht beachtet werden.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_nameFILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Gibt den Namen an, der für die Primärschlüsseleinschränkung verwendet werden soll, die automatisch für die FileTable erstellt wird.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. Wenn dieser Wert nicht angegeben ist, wird ein Name für die Einschränkung generiert.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Gibt den Namen an, der für die eindeutige Einschränkung verwendet werden soll, die automatisch für die Spalte stream_id der FileTable erstellt wird.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. Wenn dieser Wert nicht angegeben ist, wird ein Name für die Einschränkung generiert.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Gibt den Namen an, der für die eindeutige Einschränkung verwendet werden soll, die automatisch für die Spalten parent_path_locator und name in der FileTable erstellt wird.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. Wenn dieser Wert nicht angegeben ist, wird ein Name für die Einschränkung generiert.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .SYSTEM_VERSIONING = 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 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Ermöglicht die Systemversionsverwaltung der Tabelle, wenn die Einschränkungsanforderungen für den Datentyp, die NULL-Zulässigkeit und den Primärschlüssel erfüllt werden.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. Wenn das Argument HISTORY_TABLE nicht verwendet wird, generiert das System eine neue Verlaufstabelle, die dem Schema der aktuellen Tabelle in der gleichen Dateigruppe der aktuellen Tabelle entspricht, erstellt eine Verbindung zwischen den beiden Tabellen und ermöglicht dem System, den Verlauf von jedem Datensatz der aktuellen Tabelle in der Verlaufstabelle aufzuzeichnen.If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table in the same filegroup as 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 ist dann MSSQL_TemporalHistoryFor<primary_table_object_id>.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. Standardmäßig ist die Verlaufstabelle PAGE -komprimiert.By default, the history table is PAGE compressed. Das Argument HISTORY_TABLE wird verwendet, um eine Verbindung zu einer vorhandenen Verlaufstabelle zu erstellen und diese zu verwenden. Die Verbindung wird zwischen der aktuellen Tabelle und der angegebenen Tabelle hergestellt.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. Falls die aktuelle Tabelle partitioniert wurde, kann die Verlaufstabelle auf der Standarddateigruppe erstellt werden, da die Partitionierungskonfiguration nicht automatisch von der aktuellen auf die Verlaufstabelle repliziert wird.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. Falls der Name einer Verlaufstabelle während der Erstellung der Verlaufstabelle angegeben wird, müssen Sie das Schema und den Tabellennamen angeben.If the name of a history table is specified during history table creation, you must specify the schema and table name. 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 Datensätze 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. Verwenden Sie dieses Argument zusammen mit den Argumenten PERIOD FOR SYSTEM_TIME und GENERATED ALWAYS AS ROW { START | END }, um die Systemversionsverwaltung für eine Tabelle zu aktivieren.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and GENERATED ALWAYS AS ROW { START | END } arguments to enable system versioning on a table. Weitere Informationen finden Sie unter Temporal Tables.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

Erstellt eine neue Tabelle, für die Stretch Database aktiviert oder deaktiviert ist.Creates the new table with Stretch Database enabled or disabled. Weitere Informationen finden Sie unter Stretch Database.For more info, see Stretch Database.

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

Wenn Sie Stretch durch Angeben von ON für eine Tabelle aktivieren, können Sie optional MIGRATION_STATE = OUTBOUND festlegen, um sofort mit dem Migrieren von Daten zu beginnen, oder Sie legen MIGRATION_STATE = PAUSED fest, um die Datenmigration zu verzögern.When you enable Stretch for a table by specifying ON, you can optionally 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 über das Aktivieren von Stretch für eine Tabelle finden Sie unter Aktivieren von Stretch Database für eine Tabelle.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

Voraussetzungen.Prerequisites. Sie müssen Stretch auf dem Server und auf der Datenbank aktivieren, bevor Sie Stretch für eine Tabelle aktivieren können.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. Zum Aktivieren von Stretch für eine Datenbank oder eine Tabelle benötigen Sie die „db_owner“-Berechtigungen.Enabling Stretch for a database or a table requires db_owner permissions. Zum Aktivieren von Stretch für eine Tabelle benötigen Sie auch die ALTER-Berechtigungen für die Tabelle.Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

Gibt optional ein Filterprädikat zum Auswählen der Zeilen an, die aus einer Tabelle migriert werden sollen, die sowohl Verlaufsdaten als auch 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 Database für eine Tabelle und Auswählen zu migrierender Zeilen mithilfe einer Filterfunktion.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

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 ein Filterprädikat angeben, müssen Sie auch MIGRATION_STATE angeben.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017, and Azure SQL .

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database. Die verwaltete Azure SQL-Datenbank-Instanz bietet keine Unterstützung für optimierte Tabellen.Azure SQL Database Managed Instance does not support memory optiimized tables.

Der Wert ON gibt an, dass die Tabelle speicheroptimiert ist.The value ON indicates that the table is memory optimized. Speicheroptimierte Tabellen sind Teil des Features „In-Memory OLTP“, das verwendet wird, um die Leistung der Transaktionsverarbeitung zu optimieren.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. Eine Einführung in In-Memory OLTP finden Sie unter Schnellstart 1: In-Memory-OLTP-Technologien für höhere Transact-SQL-Leistung.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Ausführliche Informationen zu speicheroptimierten Tabellen finden Sie unter Speicheroptimierte Tabellen.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

Der Standardwert OFF gibt an, dass die Tabelle auf einem Datenträger basiert.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Der Wert von SCHEMA_AND_DATA gibt an, dass die Tabelle dauerhaft ist, d.h. Änderungen werden auf dem Datenträger beibehalten und überstehen Neustarts und Failover.The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA ist der Standardwert.SCHEMA_AND_DATA is the default value.

Der Wert von SCHEMA_ONLY gibt an, dass die Tabelle nicht dauerhaft ist.The value of SCHEMA_ONLY indicates that the table is non-durable. Das Tabellenschema wird beibehalten, aber Datenupdates werden nach einem Neustart oder Failover der Datenbank nicht beibehalten.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY=SCHEMA_ONLY ist nicht mit MEMORY_OPTIMIZED=OFF zulässig.DURABILITY=SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED=ON.

Warnung

Wenn eine Tabelle mit DURABILITY = SCHEMA_ONLY erstellt wird und READ_COMMITTED_SNAPSHOT anschließend mithilfe von ALTER DATABASE geändert wird, gehen Daten in der Tabelle verloren.When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNTBUCKET_COUNT

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt die Anzahl der Buckets an, die im Hashindex erstellt werden sollen.Indicates the number of buckets that should be created in the hash index. Der maximale Wert für BUCKET_COUNT in Hashindizes beträgt 1.073.741.824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Weitere Informationen zu Indizes für speicheroptimierte Tabellen finden Sie unter Indexes for Memory-Optimized Tables (Indizes für speicheroptimierte Tabellen).For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count ist ein erforderliches Argument.Bucket_count is a required argument.

INDEXINDEX

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Spalten- und Tabellenindizes können als Teil der Anweisung CREATE TABLE angeben werden.Column and table indexes can be specified as part of the CREATE TABLE statement. Ausführliche Informationen über das Hinzufügen und Entfernen von Indizes von speicheroptimierten Tabellen finden Sie unter Ändern von speicheroptimierten TabellenFor details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass ein HASH-Index erstellt wird.Indicates that a HASH index is created.

Hashindizes werden nur für speicheroptimierte Tabellen unterstützt.Hash indexes are supported only on memory-optimized tables.

RemarksRemarks

Informationen zur Anzahl zulässiger Tabellen, Spalten, Einschränkungen und Indizes finden Sie unter Spezifikationen der maximalen Kapazität für SQL Server.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

Der Speicherplatz für Tabellen und Indizes wird i. A. jeweils blockweise zugeordnet.Space is generally allocated to tables and indexes in increments of one extent at a time. Wenn die Option SET MIXED_PAGE_ALLOCATION von ALTER DATABASE beim Erstellen einer Tabelle oder eines Index auf TRUE festgelegt ist (bzw. „always“ vor SQL Server 2016 (13.x)SQL Server 2016 (13.x)), werden so lange Seiten aus gemischten Blöcken zugewiesen, bis ausreichend Seiten zum Füllen eines einheitlichen Blocks vorhanden sind.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. Wenn genügend Seiten für einen einheitlichen Block vorhanden sind, wird jedes Mal dann ein weiterer Block zugeordnet, wenn die bereits zugeordneten Blöcke voll sind.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. Führen Sie sp_spaceused aus, um einen Bericht darüber zu erhalten, wie viel Speicherplatz für eine Tabelle zugeordnet ist und von dieser verwendet wird.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

Das Datenbank-EngineDatabase Engine erzwingt keine Reihenfolge für die Angabe von DEFAULT, IDENTITY, ROWGUIDCOL oder Spalteneinschränkungen in einer Spaltendefinition.The Datenbank-EngineDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

Beim Erstellen einer Tabelle wird die Option QUOTED IDENTIFIER immer mit der Einstellung ON in den Metadaten der Tabelle gespeichert, und zwar auch dann, wenn die Option beim Erstellen der Tabelle auf OFF festgelegt ist.When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the metadata for the table, even if the option is set to OFF when the table is created.

Temporäre TabellenTemporary Tables

Sie können sowohl lokale als auch globale temporäre Tabellen erstellen.You can create local and global temporary tables. Lokale temporäre Tabellen sind nur während der aktuellen Sitzung sichtbar; globale temporäre Tabellen sind von allen Sitzungen aus sichtbar.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. Temporäre Tabellen können nicht partitioniert werden.Temporary tables cannot be partitioned.

Stellen Sie lokalen temporären Tabellennamen ein einzelnes Nummernzeichen (#table_name) und globalen temporären Tabellennamen ein doppeltes Nummernzeichen voran (##table_name).Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

SQL-Anweisungen verweisen auf die temporäre Tabelle, indem sie den in der CREATE TABLE-Anweisung angegebenen Wert für table_name verwenden. Zum Beispiel:SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example####:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);  

INSERT INTO #MyTempTable VALUES (1);  

Wenn mehr als eine temporäre Tabelle innerhalb einer einzigen gespeicherten Prozedur oder innerhalb eines Batches erstellt wird, müssen verschiedene Namen für die temporären Tabellen verwendet werden.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

Wenn eine lokale temporäre Tabelle in einer gespeicherten Prozedur oder einer Anwendung erstellt wird, die von mehreren Benutzern gleichzeitig ausgeführt werden kann, muss es dem Datenbank-EngineDatabase Engine möglich sein, die von den verschiedenen Benutzern erstellten Tabellen zu unterscheiden.If a local temporary table is created in a stored procedure or application that can be executed at the same time by several users, the Datenbank-EngineDatabase Engine must be able to distinguish the tables created by the different users. Zu diesem Zweck fügt das Datenbank-EngineDatabase Engine intern ein numerisches Suffix an alle Namen lokaler temporärer Tabellen an.The Datenbank-EngineDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. Der vollständige, in der Tabelle sysobjects von tempdb gespeicherte Name einer temporären Tabelle besteht aus dem in der CREATE TABLE-Anweisung angegebenen Tabellennamen und dem vom System generierten numerischen Suffix.The full name of a temporary table as stored in the sysobjects table in tempdb is made up of the table name specified in the CREATE TABLE statement and the system-generated numeric suffix. Damit das Suffix angefügt werden kann, darf table_name für eine lokale temporäre Tabelle nicht länger als 116 Zeichen sein.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

Temporäre Tabellen werden automatisch gelöscht, wenn sie nicht mehr gültig sind, es sei denn, sie wurden bereits explizit mithilfe von DROP TABLE gelöscht:Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • Eine lokale temporäre Tabelle, die in einer gespeicherten Prozedur erstellt wurde, wird bei Beendigung der gespeicherten Prozedur automatisch gelöscht.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. Auf die Tabelle kann durch geschachtelte gespeicherte Prozeduren verwiesen werden, die von der gespeicherten Prozedur ausgeführt werden, die die Tabelle erstellt hat.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. Auf die Tabelle kann nicht durch den Vorgang verwiesen werden, der die gespeicherte Prozedur, die die Tabelle erstellt hat, aufgerufen hat.The table cannot be referenced by the process that called the stored procedure that created the table.

  • Alle anderen lokalen temporären Tabellen werden am Ende der aktuellen Sitzung automatisch gelöscht.All other local temporary tables are dropped automatically at the end of the current session.

  • Eine globale temporäre Tabelle wird automatisch gelöscht, wenn die Sitzung, die die betreffende Tabelle erstellt hat, beendet wird und kein Task mehr auf die Tabelle verweist.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. Die Zuordnung zwischen einem Task und einer Tabelle wird nur für die Dauer einer einzelnen Transact-SQLTransact-SQL-Anweisung aufrechterhalten.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. Das bedeutet, dass eine globale temporäre Tabelle bei Beendigung der letzten Transact-SQLTransact-SQL-Anweisung gelöscht wird, die aktiv auf die Tabelle verwiesen hat, als die Sitzung, die die Tabelle erstellt hat, beendet wurde.This means that a global temporary table is dropped at the completion of the last Transact-SQLTransact-SQL statement that was actively referencing the table when the creating session ended.

    Eine lokale temporäre Tabelle, die in einer gespeicherten Prozedur oder einem Trigger erstellt wurde, kann den gleichen Namen wie eine temporäre Tabelle haben, die vor dem Aufruf der gespeicherten Prozedur oder des Triggers erstellt wurde.A local temporary table created within a stored procedure or trigger can have the same name as a temporary table that was created before the stored procedure or trigger is called. Wenn jedoch eine Abfrage auf eine temporäre Tabelle verweist und zu diesem Zeitpunkt zwei temporäre Tabellen mit demselben Namen vorhanden sind, ist nicht definiert, anhand welcher Tabelle die Abfrage aufgelöst werden soll.However, if a query references a temporary table and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. Eine geschachtelte gespeicherte Prozedur kann ebenfalls eine temporäre Tabelle mit demselben Namen wie eine temporäre Tabelle erstellen, die von der gespeicherten Prozedur erstellt wurde, die die geschachtelte gespeicherte Prozedur aufgerufen hat.Nested stored procedures can also create temporary tables with the same name as a temporary table that was created by the stored procedure that called it. Damit jedoch Änderungsanweisungen anhand der Tabelle aufgelöst werden können, die in der geschachtelten Prozedur erstellt wurde, muss die Tabelle die gleiche Struktur mit den gleichen Spaltennamen wie die Tabelle aufweisen, die in der aufrufenden Prozedur erstellt wurde.However, for modifications to resolve to the table that was created in the nested procedure, the table must have the same structure, with the same column names, as the table created in the calling procedure. Dies wird im folgenden Beispiel gezeigt.This is shown in the following example.

CREATE PROCEDURE dbo.Test2  
AS  
n    CREATE TABLE #t(x INT PRIMARY KEY);  
    INSERT INTO #t VALUES (2);  
    SELECT Test2Col = x FROM #t;  
GO  

CREATE PROCEDURE dbo.Test1  
AS  
    CREATE TABLE #t(x INT PRIMARY KEY);  
    INSERT INTO #t VALUES (1);  
    SELECT Test1Col = x FROM #t;  
 EXEC Test2;  
GO  

CREATE TABLE #t(x INT PRIMARY KEY);  
INSERT INTO #t VALUES (99);  
GO  

EXEC Test1;  
GO  

Im Folgenden finden Sie das Resultset.Here is the result set.

(1 row(s) affected) 
Test1Col 
----------- 
1 

(1 row(s) affected) 
Test2Col 
----------- 
2 

Beim Erstellen lokaler oder globaler temporärer Tabellen unterstützt die Syntax der CREATE TABLE-Anweisung Einschränkungsdefinitionen mit Ausnahme von FOREIGN KEY-Einschränkungen.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. Wenn eine FOREIGN KEY-Einschränkung in einer temporären Tabelle angegeben wird, gibt die Anweisung ein Warnmeldung zurück, die besagt, dass die Einschränkung nicht berücksichtigt wurde.If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. Die Tabelle wird dennoch, jedoch ohne die FOREIGN KEY-Einschränkungen erstellt.The table is still created without the FOREIGN KEY constraints. In FOREIGN KEY-Einschränkungen kann nicht auf temporäre Tabellen verwiesen werden.Temporary tables cannot be referenced in FOREIGN KEY constraints.

Wenn eine temporäre Tabelle mit einer benannten Einschränkung und innerhalb des Bereichs einer benutzerdefinierten Transaktion erstellt wird, kann jeweils nur ein Benutzer die Anweisung ausführen, mit der die temporäre Tabelle erstellt wird.If a temporary table is created with a named constraint and the temporary table is created within the scope of a user-defined transaction, only one user at a time can execute the statement that creates the temp table. Wenn zum Beispiel eine gespeicherte Prozedur eine temporäre Tabelle mit einer benannten Primärschlüsseleinschränkung erstellt, kann die gespeicherte Prozedur nicht von mehreren Benutzern gleichzeitig ausgeführt werden.For example, if a stored procedure creates a temporary table with a named primary key constraint, the stored procedure cannot be executed simultaneously by multiple users.

Datenbankweit gültige globale temporäre Tabellen (Azure SQL-Datenbank)Database scoped global temporary tables (Azure SQL Database)

Globale temporäre Tabellen für SQL ServerSQL Server (mit „## table_name“ initiiert) werden in „tempdb“ gespeichert und für alle Benutzersitzungen in der gesamten SQL ServerSQL Server-Instanz freigegeben.Global temporary tables for SQL ServerSQL Server (initiated with ## table name) are stored in tempdb and shared among all users' sessions across the whole SQL ServerSQL Server instance. Informationen zu SQL-Tabellentypen finden Sie im obigen Abschnitt zum Erstellen von Tabellen.For information on SQL table types, see the above section on Create Tables.

In Azure SQL-DatenbankAzure SQL Database werden globale temporäre Tabellen unterstützt, die in „tempdb“ gespeichert werden und auf Datenbankebene gelten. Azure SQL-DatenbankAzure SQL Database supports global temporary tables that are also stored in tempdb and scoped to the database level. Das heißt, dass globale temporäre Tabellen für alle Benutzersitzungen innerhalb derselben Azure SQL-DatenbankAzure SQL Database freigegeben werden.This means that global temporary tables are shared for all users' sessions within the same Azure SQL-DatenbankAzure SQL Database. Benutzersitzungen von anderen Datenbanken können nicht auf globale temporäre Tabellen zugreifen.User sessions from other databases cannot access global temporary tables.

Globale temporäre Tabellen für Azure SQL-DatenbankAzure SQL Database befolgen die gleiche Syntax und Semantik, die bei SQL ServerSQL Server für temporäre Tabellen verwendet werden.Global temporary tables for Azure SQL-DatenbankAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. Auf ähnliche Weise gelten globale temporäre gespeicherte Prozeduren in Azure SQL-DatenbankAzure SQL Database auf Datenbankebene.Similarly, global temporary stored procedures are also scoped to the database level in Azure SQL-DatenbankAzure SQL Database. Lokale temporäre Tabellen (mit „# table_name“ initiiert) werden auch für Azure SQL-DatenbankAzure SQL Database unterstützt und befolgen die gleiche Syntax und Semantik, die bei SQL ServerSQL Server verwendet werden.Local temporary tables (initiated with # table name) are also supported for Azure SQL-DatenbankAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. Informationen dazu finden Sie im obigen Abschnitt Temporäre Tabellen.See the above section on Temporary Tables.

Wichtig

Diese Funktion ist verfügbar für Azure SQL-DatenbankAzure SQL Database.This feature is available for Azure SQL-DatenbankAzure SQL Database.

Problembehandlung bei globalen temporären Tabellen für Azure SQL-DatenbankTroubleshooting global temporary tables for Azure SQL Database

Informationen zur Problembehandlung bei der Datenbank „tempdb“ finden Sie unter Problembehandlung bei unzureichendem Speicherplatz in tempdb.For the troubleshooting the tempdb, see Troubleshooting Insufficient Disk space in tempdb.

Hinweis

Nur ein Serveradministrator kann auf die Problembehandlungs-DMVs in Azure SQL-DatenbankAzure SQL Database zugreifen.Only a server admin can access the troubleshooting DMVs in Azure SQL-DatenbankAzure SQL Database.

BerechtigungenPermissions

Jeder Benutzer ist berechtigt, globale temporäre Objekte zu erstellen.Any user can create global temporary objects. Benutzer haben nur Zugriff auf ihre eigenen Objekte, es sei denn, ihnen wurden zusätzliche Berechtigungen zugewiesen.Users can only access their own objects, unless they receive additional permissions.

BeispieleExamples

  • Sitzung A erstellt die globale temporäre Tabelle „##test“ in Azure SQL-DatenbankAzure SQL Database „testdb1“und fügt eine Zeile hinzu.Session A creates a global temp table ##test in Azure SQL-DatenbankAzure SQL Database testdb1 and adds 1 row
CREATE TABLE ##test ( a int, b int);
INSERT INTO ##test values (1,1);

--Obtain object ID for temp table ##test 
SELECT OBJECT_ID('tempdb.dbo.##test') AS 'Object ID'; 

---Result
1253579504

---Obtain global temp table name for a given object ID 1253579504 in tempdb (2)
SELECT name FROM tempdb.sys.objects WHERE object_id = 1253579504

---Result
##test
  • Sitzung B stellt eine Verbindung zu „testdb1“ in Azure SQL-DatenbankAzure SQL Database her und kann auf die von Sitzung A erstellte Tabelle „##test“ zugreifen.Session B connects to Azure SQL-DatenbankAzure SQL Database testdb1 and can access table ##test created by session A
SELECT * FROM ##test
---Results
1,1
  • Sitzung C stellt eine Verbindung zu einer anderen Datenbank in Azure SQL-DatenbankAzure SQL Database namens „testdb2“ her und möchte auf die Tabelle „##test“ in der Datenbank „testdb1“ zugreifen.Session C connects to another database in Azure SQL-DatenbankAzure SQL Database testdb2 and wants to access ##test created in testdb1. SELECT schlägt aufgrund des Datenbankbereichs für die globalen temporären Tabellen fehl.This select fails due to the database scope for the global temp tables
SELECT * FROM ##test
---Results
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'
  • Adressieren des Systemobjekts in „tempdb“ in Azure SQL-DatenbankAzure SQL Database aus der aktuellen Benutzerdatenbank „testdb1“.Addressing system object in Azure SQL-DatenbankAzure SQL Database tempdb from current user database testdb1
SELECT * FROM tempdb.sys.objects
SELECT * FROM tempdb.sys.columns
SELECT * FROM tempdb.sys.database_files

Partitionierte TabellenPartitioned tables

Bevor eine partitionierte Tabelle mithilfe von CREATE TABLE erstellt wird, müssen Sie zuerst eine Partitionsfunktion erstellen, um anzugeben, wie die Tabelle partitioniert werden soll.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. Eine Partitionsfunktion wird mit CREATE PARTITION FUNCTION erstellt.A partition function is created by using CREATE PARTITION FUNCTION. Darüber hinaus müssen Sie ein Partitionsschema erstellen, um die Dateigruppen anzugeben, die die von der Partitionsfunktion angegebenen Partitionen aufnehmen.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. Ein Partitionsschema wird mit CREATE PARTITION SCHEME erstellt.A partition scheme is created by using CREATE PARTITION SCHEME. Das Platzieren von PRIMARY KEY- oder UNIQUE-Einschränkungen in verschiedenen Dateigruppen ist bei partitionierten Tabellen nicht möglich.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. Weitere Informationen finden Sie unter partitionierte Tabellen und Indizes.For more information, see Partitioned Tables and Indexes.

PRIMARY KEY-EinschränkungenPRIMARY KEY Constraints

  • Eine Tabelle kann nur eine PRIMARY KEY-Einschränkung enthalten.A table can contain only one PRIMARY KEY constraint.

  • Der durch eine PRIMARY KEY-Einschränkung generierte Index kann nicht dazu führen, dass die Anzahl der Indizes der Tabelle 999 nicht gruppierte Indizes und 1 gruppierten Index übersteigt.The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Wenn CLUSTERED oder NONCLUSTERED für eine PRIMARY KEY-Einschränkung nicht angegeben ist, wird CLUSTERED verwendet, sofern keine gruppierten Indizes für UNIQUE-Einschränkungen angegeben sind.If CLUSTERED or NONCLUSTERED is not specified for a PRIMARY KEY constraint, CLUSTERED is used if there are no clustered indexes specified for UNIQUE constraints.

  • Alle Spalten, für die eine PRIMARY KEY-Einschränkung definiert wurde, müssen als NOT NULL definiert sein.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. Falls weder NULL noch NOT NULL angegeben ist, wird für alle Spalten, auf die eine PRIMARY KEY-Einschränkung angewendet wird, die NULL-Zulässigkeit auf NOT NULL festgelegt.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    Hinweis

    In speicheroptimierten Tabellen sind Schlüsselspalten mit NULL-Zulässigkeit zulässig.For memory-optimized tables, the NULLable key column is allowed.

  • Wenn ein Primärschlüssel für eine Spalte eines CLR-benutzerdefinierten Typs definiert wird, muss die Implementierung des Typs eine binäre Sortierreihenfolge unterstützen.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.For more information, see CLR User-Defined Types.

UNIQUE-EinschränkungenUNIQUE Constraints

  • Wenn CLUSTERED oder NONCLUSTERED für eine UNIQUE-Einschränkung nicht angegeben ist, wird standardmäßig NONCLUSTERED verwendet.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.

  • Jede UNIQUE-Einschränkung erzeugt einen Index.Each UNIQUE constraint generates an index. Die Anzahl der UNIQUE-Einschränkungen kann nicht dazu führen, dass die Anzahl der Indizes der Tabelle 999 nicht gruppierte Indizes und 1 gruppierten Index übersteigt.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • Wenn eine UNIQUE-Einschränkung für eine Spalte eines CLR-benutzerdefinierten Typs definiert wird, muss die Implementierung des Typs eine binäre oder operatorbasierte Sortierreihenfolge unterstützen.If a unique constraint is defined on a CLR user-defined type column, the implementation of the type must support binary or operator-based ordering. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.For more information, see CLR User-Defined Types.

FremdschlüsseleinschränkungenFOREIGN KEY Constraints

  • Wenn ein anderer Wert als NULL in die Spalte einer FOREIGN KEY-Einschränkung eingegeben wird, muss der Wert in der Spalte vorhanden sein, auf die verwiesen wird; andernfalls wird eine Fremdschlüsselverletzungs-Fehlermeldung zurückgegeben.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned.

  • FOREIGN KEY-Einschränkungen werden auf die vorangegangene Spalte angewendet, es sei denn, es werden Quellspalten angegeben.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • FOREIGN KEY-Einschränkungen können nur auf Tabellen verweisen, die sich innerhalb derselben Datenbank auf demselben Server befinden.FOREIGN KEY constraints can reference only tables within the same database on the same server. Datenbankübergreifende referenzielle Integrität muss durch Trigger implementiert werden.Cross-database referential integrity must be implemented through triggers. Weitere Informationen finden Sie unter CREATE TRIGGER (Transact-SQL).For more information, see CREATE TRIGGER (Transact-SQL).

  • FOREIGN KEY-Einschränkungen können auf eine andere Spalte in derselben Tabelle verweisen.FOREIGN KEY constraints can reference another column in the same table. Ein solcher Verweis wird als Eigenverweis bezeichnet.This is referred to as a self-reference.

  • Die REFERENCES-Klausel einer FOREIGN KEY-Einschränkung auf Spaltenebene kann nur eine Verweisspalte auflisten.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. Diese Spalte muss denselben Datentyp aufweisen wie die Spalte, für die die Einschränkung definiert wurde.This column must have the same data type as the column on which the constraint is defined.

  • Die REFERENCES-Klausel einer FOREIGN KEY-Einschränkung auf Tabellenebene muss ebenso viele Verweisspalten haben, wie sich Spalten in der Einschränkungsspaltenliste befinden.The REFERENCES clause of a table-level FOREIGN KEY constraint must have the same number of reference columns as the number of columns in the constraint column list. Der Datentyp jeder Verweisspalte muss ebenfalls mit dem der entsprechenden Spalte in der Spaltenliste übereinstimmen.The data type of each reference column must also be the same as the corresponding column in the column list.

  • CASCADE, SET NULL oder SET DEFAULT können nicht angegeben werden, wenn eine Spalte vom Typ timestamp Teil des Fremdschlüssels oder des Schlüssels ist, auf den verwiesen wird.CASCADE, SET NULL or SET DEFAULT cannot be specified if a column of type timestamp is part of either the foreign key or the referenced key.

  • CASCADE, SET NULL, SET DEFAULT und NO ACTION können für Tabellen kombiniert werden, die referenzielle Beziehungen untereinander aufweisen.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. Wenn das Datenbank-EngineDatabase Engine die Einstellung NO ACTION feststellt, wird die Verarbeitung beendet und ein Rollback für verbundene CASCADE-, SET NULL- und SET DEFAULT-Aktionen ausgeführt.If the Datenbank-EngineDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. Wenn eine DELETE-Anweisung eine Kombination aus CASCADE-, SET NULL-, SET DEFAULT- und NO ACTION-Aktionen bewirkt, werden alle CASCADE-, SET NULL- und SET DEFAULT-Aktionen angewendet, bevor das Datenbank-EngineDatabase Engine nach der möglichen Angabe von NO ACTION sucht.When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the Datenbank-EngineDatabase Engine checks for any NO ACTION.

  • Das Datenbank-EngineDatabase Engine verfügt über keine vordefinierte Grenze hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen, die eine Tabelle, die auf andere Tabellen verweist, enthalten kann, oder hinsichtlich der Anzahl von FOREIGN KEY-Einschränkungen im Besitz anderer Tabellen, die auf eine bestimmte Tabelle verweisen.The Datenbank-EngineDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table.

    Nichtsdestotrotz ist die tatsächliche Anzahl von FOREIGN KEY-Einschränkungen , die verwendet werden können, durch die Hardwarekonfiguration und den Entwurf der Datenbank und der Anwendung begrenzt.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. Als Empfehlung gilt, dass eine Tabelle maximal 253 FOREIGN KEY-Einschränkungen enthalten sollte und dass maximal 253 FOREIGN KEY-Einschränkungen auf eine Tabelle verweisen sollten.We recommend that a table contain no more than 253 FOREIGN KEY constraints, and that it be referenced by no more than 253 FOREIGN KEY constraints. Die in Ihrem Fall tatsächlich gültige Grenze kann je nach Anwendung und Hardware darüber oder darunter liegen.The effective limit for you may be more or less depending on the application and hardware. Beim Entwerfen von Datenbank und Anwendungen sollten Sie die Kosten für das Erzwingen von FOREIGN KEY-Einschränkungen berücksichtigen.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • FOREIGN KEY-Einschränkungen werden nicht auf temporäre Tabellen angewendet.FOREIGN KEY constraints are not enforced on temporary tables.

  • FOREIGN KEY-Einschränkungen können nur auf Spalten in PRIMARY KEY- oder UNIQUE-Einschränkungen in der Tabelle, auf die verwiesen wird, oder auf eine UNIQUE INDEX-Einschränkung für die Tabelle, auf die verwiesen wird, verweisen.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • Wenn ein Fremdschlüssel für eine Spalte eines CLR-benutzerdefinierten Typs definiert wird, muss die Implementierung des Typs eine binäre Sortierreihenfolge unterstützen.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. Weitere Informationen finden Sie unter Benutzerdefinierte CLR-Typen.For more information, see CLR User-Defined Types.

  • Für Spalten, die an einer Fremdschlüsselbeziehung beteiligt sind, muss die gleiche Länge und Skala definiert sein.Columns participating in a foreign key relationship must be defined with the same length and scale.

DEFAULT-DefinitionenDEFAULT definitions

  • Eine Spalte kann nur eine DEFAULT-Definition haben.A column can have only one DEFAULT definition.

  • Eine DEFAULT-Definition kann konstante Werte, Funktionen, standardmäßige NILADIC-SQL-Funktionen oder NULL enthalten.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. Die folgende Tabelle zeigt die Funktionen ohne Argumente und die Werte, die sie während einer INSERT-Anweisung für den Standardwert zurückgeben.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    SQL-92-Funktion ohne ArgumenteSQL-92 niladic function Zurückgegebener WertValue returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP Aktuelles Datum und aktuelle Uhrzeit.Current date and time.
    CURRENT_USERCURRENT_USER Name des Benutzers, der einen Einfügevorgang ausführt.Name of user performing an insert.
    SESSION_USERSESSION_USER Name des Benutzers, der einen Einfügevorgang ausführt.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER Name des Benutzers, der einen Einfügevorgang ausführt.Name of user performing an insert.
    BenutzerUSER Name des Benutzers, der einen Einfügevorgang ausführt.Name of user performing an insert.
  • constant_expression in einer DEFAULT-Definition kann nicht auf eine andere Spalte in der Tabelle oder auf andere Tabellen, Sichten oder gespeicherte Prozeduren verwiesen werden.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • DEFAULT-Definitionen können nicht für Spalten mit einem timestamp-Datentyp oder für Spalten mit IDENTITY-Eigenschaft erstellt werden.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • DEFAULT-Definitionen können nicht für Spalten mit Aliasdatentypen erstellt werden, wenn der Aliasdatentyp an ein Standardobjekt gebunden ist.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

CHECK-EinschränkungenCHECK Constraints

  • Eine Spalte kann beliebig viele CHECK-Einschränkungen haben, und die Bedingung kann mehrere logische Ausdrücke enthalten, die mit AND und OR verknüpft sind.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. Mehrere CHECK-Einschränkungen für eine Spalte werden in der Reihenfolge überprüft, in der sie erstellt wurden.Multiple CHECK constraints for a column are validated in the order they are created.

  • Die Suchbedingung muss einen booleschen Ausdruck ergeben und darf nicht auf eine andere Tabelle verweisen.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • Eine CHECK-Einschränkung auf Spaltenebene kann nur auf die von der Einschränkung betroffene Spalte verweisen, und eine CHECK-Einschränkung auf Tabellenebene kann nur auf Spalten derselben Tabelle verweisen.A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.

    CHECK-Einschränkungen und Regeln dienen beide zur Überprüfung der Daten während INSERT- und UPDATE-Anweisungen.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • Sobald eine Regel und mindestens eine CHECK-Einschränkung für eine oder mehrere Spalten vorhanden sind, werden alle Einschränkungen ausgewertet.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • CHECK-Einschränkungen können nicht für Spalten vom Typ text, ntext oder image definiert werden.CHECK constraints cannot be defined on text, ntext, or image columns.

Weitere Informationen zu EinschränkungenAdditional Constraint information

  • Ein für eine Einschränkung erstellter Index kann nicht mit DROP INDEX gelöscht werden. Die Einschränkung muss mithilfe von ALTER TABLE gelöscht werden.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. Ein Index, der für eine Einschränkung erstellt wurde und von ihr verwendet wird, kann mithilfe von ALTER INDEX ... REBUILD neu erstellt werden.An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. Weitere Informationen finden Sie unter Neuorganisieren und Neuerstellen von Indizes.For more information, see Reorganize and Rebuild Indexes.

  • Einschränkungsnamen müssen den Regeln für Bezeichner entsprechen, wobei der Name nicht mit einem Nummernzeichen (#) beginnen darf.Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). Wenn constraint_name nicht angegeben ist, vergibt das System einen Namen für die Einschränkung.If constraint_name is not supplied, a system-generated name is assigned to the constraint. Der Einschränkungsname wird in jeder Fehlermeldung über Einschränkungsverletzungen angezeigt.The constraint name appears in any error message about constraint violations.

  • Wenn eine Einschränkung in einer INSERT-, UPDATE- oder DELETE-Anweisung verletzt wird, wird die Anweisung beendet.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. Wenn SET XACT_ABORT jedoch auf OFF festgelegt ist, wird die Verarbeitung der Transaktion – falls die Anweisung Teil einer expliziten Transaktion ist – fortgesetzt.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. Wenn SET XACT_ABORT auf ON festgelegt ist, wird für die ganze Transaktion ein Rollback ausgeführt.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. Sie können auch die ROLLBACK TRANSACTION-Anweisung mit der Transaktionsdefinition verwenden, indem Sie die @@ERROR-Systemfunktion prüfen.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.

  • Wenn ALLOW_ROW_LOCKS = ON und ALLOW_PAGE_LOCK = ON angegeben sind, sind Sperren auf Zeilen-, Seiten- und Tabellenebene zulässig, wenn auf den Index zugegriffen wird.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. Das Datenbank-EngineDatabase Engine wählt die geeignete Sperre aus und kann die Sperre von einer Zeilen- oder Seitensperre auf eine Tabellensperre ausweiten.The Datenbank-EngineDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. Wenn ALLOW_ROW_LOCKS = OFF und ALLOW_PAGE_LOCK = OFF angegeben sind, ist nur eine Sperre auf Tabellenebene zulässig, wenn auf den Index zugegriffen wird.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

  • Wenn eine Tabelle FOREIGN KEY- oder CHECK-Einschränkungen und Trigger hat, werden die Einschränkungsbedingungen ausgewertet, bevor der Trigger ausgeführt wird.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

    Verwenden Sie sp_help oder sp_helpconstraint, um einen Bericht über eine Tabelle und deren Spalten zu erhalten.For a report on a table and its columns, use sp_help or sp_helpconstraint. Zum Umbenennen einer Tabelle verwenden Sie sp_rename.To rename a table, use sp_rename. Verwenden Sie für einen Bericht zu den Sichten und gespeicherten Prozeduren, die von einer Tabelle abhängen, sys.dm_sql_referenced_entities und sys.dm_sql_referencing_entities.For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

NULL-Zulässigkeitsregeln in einer TabellendefinitionNullability rules within a table definition

Die NULL-Zulässigkeit einer Spalte bestimmt, ob diese Spalte NULL als Datenwert enthalten kann.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL ist nicht Null oder leer. NULL bedeutet, dass kein Eintrag vorgenommen oder explizit NULL angegeben wurde, und impliziert üblicherweise, dass der Wert entweder unbekannt oder nicht anwendbar ist.NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

Wenn Sie CREATE TABLE- oder ALTER TABLE verwenden, um eine Tabelle zu erstellen bzw. zu ändern, wird die NULL-Zulässigkeit des in einer Spaltendefinition verwendeten Datentyps durch Datenbank- und Sitzungseinstellungen beeinflusst und möglicherweise überschrieben.When you use CREATE TABLE or ALTER TABLE to create or alter a table, database and session settings influence and possibly override the nullability of the data type that is used in a column definition. Es empfiehlt sich, bei nicht berechneten Spalten stets explizit NULL oder NOT NULL für die Spalte anzugeben oder, im Falle eines benutzerdefinierten Datentyps, zuzulassen, dass die Spalte die standardmäßige NULL-Zulässigkeit des Datentyps verwendet.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns or, if you use a user-defined data type, that you allow the column to use the default nullability of the data type. Spalten mit geringer Dichte müssen immer NULL zulassen.Sparse columns must always allow NULL.

Wenn die NULL-Zulässigkeit der Spalte nicht explizit angegeben ist, wird sie gemäß den in der folgenden Tabelle aufgeführten Regeln hergeleitet.When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

SpaltendatentypColumn data type RegelRule
AliasdatentypAlias data type Das Datenbank-EngineDatabase Engine verwendet die NULL-Zulässigkeit, die beim Erstellen des Datentyps angegeben wurde.The Datenbank-EngineDatabase Engine uses the nullability that is specified when the data type was created. Verwenden Sie sp_help zum Bestimmen der standardmäßigen NULL-Zulässigkeit des Datentyps.To determine the default nullability of the data type, use sp_help.
CLR-benutzerdefinierter TypCLR user-defined type Die NULL-Zulässigkeit wird gemäß der Spaltendefinition bestimmt.Nullability is determined according to the column definition.
Vom System bereitgestellter DatentypSystem-supplied data type Wenn es für den vom System bereitgestellten Datentyp nur eine Option gibt, hat diese Vorrang.If the system-supplied data type has only one option, it takes precedence. Für timestamp-Datentypen muss NOT NULL angegeben werden.timestamp data types must be NOT NULL. Wenn Sitzungseinstellungen mithilfe von SET auf ON festgelegt werden, gilt Folgendes:When any session settings are set ON by using SET:
Wenn ANSI_NULL_DFLT_ON auf ON festgelegt ist, wird NULL zugewiesen.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
Wenn ANSI_NULL_DFLT_OFF auf ON festgelegt ist, wird NOT NULL zugewiesen.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

Wenn Datenbankeinstellungen mithilfe von ALTER DATABASE konfiguriert werden, gilt Folgendes:When any database settings are configured by using ALTER DATABASE:
Wenn ANSI_NULL_DEFAULT_ON auf ON festgelegt ist, wird NULL zugewiesen.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
Wenn ANSI_NULL_DEFAULT_OFF auf ON festgelegt ist, wird NOT NULL zugewiesen.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

Zum Anzeigen der Datenbankeinstellungen für ANSI_NULL_DEFAULT verwenden Sie die Katalogsicht sys.databases.To view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

Wenn keine der ANSI_NULL_DFLT-Optionen für die Sitzung festgelegt wurde und für die Datenbank die Standardeinstellung gilt (ANSI_NULL_DEFAULT ist auf OFF festgelegt), wird der Standardwert NOT NULL zugewiesen.When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULTis OFF), the default of NOT NULL is assigned.

Wenn es sich bei der Spalte um eine berechnete Spalte handelt, wird die NULL-Zulässigkeit stets automatisch durch das Datenbank-EngineDatabase Engine bestimmt.If the column is a computed column, its nullability is always automatically determined by the Datenbank-EngineDatabase Engine. Zum Bestimmen der NULL-Zulässigkeit dieser Art von Spalte verwenden Sie die Funktion COLUMNPROPERTY mit der Eigenschaft AllowsNull.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

Hinweis

Für den SQL Server-ODBC-Treiber und den Microsoft OLE DB Provider für SQL Server ist ANSI_NULL_DFLT_ON standardmäßig auf ON festgelegt.The SQL Server ODBC driver and Microsoft OLE DB Provider for SQL Server both default to having ANSI_NULL_DFLT_ON set to ON. ODBC- und OLE DB-Benutzer können dies in ODBC-Datenquellen oder mit von der Anwendung festgelegten Verbindungsattributen oder -eigenschaften konfigurieren.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

DatenkomprimierungData Compression

Für Systemtabellen ist die Komprimierung nicht verfügbar.System tables cannot be enabled for compression. Bei Erstellung einer Tabelle wird die Datenkomprimierung auf NONE festgelegt, falls nicht anders angegeben.When you are creating a table, data compression is set to NONE, unless specified otherwise. Wenn Sie eine Partitionsliste bzw. eine Partition außerhalb des zulässigen Bereichs angeben, wird ein Fehler generiert.If you specify a list of partitions or a partition that is out of range, an error will be generated. Weitere Informationen zur Datenkomprimierung finden Sie unter Datenkomprimierung.For a more information about data compression, see Data 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.

BerechtigungenPermissions

Es sind die CREATE TABLE-Berechtigung in der Datenbank und die ALTER-Berechtigung für das Schema erforderlich, in der die Tabelle erstellt wird.Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

Wenn in der CREATE TABLE-Anweisung eine Spalte als Spalte eines benutzerdefinierten Typs definiert wird, ist die REFERENCES-Berechtigung für den benutzerdefinierten Typ erforderlich.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Wenn in der CREATE TABLE-Anweisung eine Spalte als Spalte eines CLR-benutzerdefinierten Typs definiert wird, ist entweder der Besitz des Typs oder die REFERENCES-Berechtigung für den Typ erforderlich.If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

Wenn einer Spalte in der CREATE TABLE-Anweisung eine XML-Schemaauflistung zugeordnet ist, ist entweder der Besitz der XML-Schemaauflistung oder die REFERENCES-Berechtigung für die Auflistung erforderlich.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

Jeder Benutzer ist berechtigt, temporäre Tabellen in tempdb zu erstellen.Any user can create temporary tables in tempdb.

BeispieleExamples

A.A. Erstellen einer PRIMARY KEY-Einschränkung für eine SpalteCreate a PRIMARY KEY constraint on a column

Im folgenden Beispiel ist die Spaltendefinition für eine PRIMARY KEY-Einschränkung dargestellt, die über einen gruppierten Index für die EmployeeID-Spalte der Employee-Tabelle verfügt.The following example shows the column definition for a PRIMARY KEY constraint with a clustered index on the EmployeeID column of the Employee table. Da kein Einschränkungsname angegeben ist, wird der Einschränkungsname vom System angegeben.Because a constraint name is not specified, the system supplies the constraint name.

CREATE TABLE dbo.Employee (EmployeeID int  
PRIMARY KEY CLUSTERED);  

B.B. Verwenden von FOREIGN KEY-EinschränkungenUsing FOREIGN KEY constraints

Eine FOREIGN KEY-Einschränkung wird zum Verweisen auf eine andere Tabelle verwendet.A FOREIGN KEY constraint is used to reference another table. Fremdschlüssel können einspaltige oder mehrspaltige Schlüssel sein.Foreign keys can be single-column keys or multicolumn keys. Dieses Beispiel zeigt eine einspaltige FOREIGN KEY-Einschränkung für die SalesOrderHeader-Tabelle, die auf die SalesPerson-Tabelle verweist.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. Für eine einspaltige FOREIGN KEY-Einschränkung wird nur die REFERENCES-Klausel benötigt.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL  
REFERENCES SalesPerson(SalesPersonID)  

Sie können auch explizit die FOREIGN KEY-Klausel verwenden und das Spaltenattribut nochmals nennen.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. Beachten Sie, dass der Spaltenname in den beiden Tabellen nicht identisch sein muss.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)  

Einschränkungen für mehrspaltige Schlüssel werden als Tabelleneinschränkungen erstellt.Multicolumn key constraints are created as table constraints. Die SpecialOfferProduct-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank enthält einen mehrspaltigen Primärschlüssel.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. Das folgende Beispiel zeigt, wie von einer anderen Tabelle aus auf diesen Schlüssel verwiesen wird; die Angabe eines expliziten Einschränkungsnamens ist optional.The following example shows how to reference this key from another table; an explicit constraint name is optional.

CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail FOREIGN KEY  
 (ProductID, SpecialOfferID)  
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)  

C.C. Verwenden von UNIQUE-EinschränkungenUsing UNIQUE constraints

UNIQUE-Einschränkungen werden verwendet, um Eindeutigkeit für Nicht-Primärschlüsselspalten zu erzwingen.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. Im folgenden Beispiel wird eine Einschränkung erzwungen, durch die festgelegt wird, dass die Name-Spalte der Product-Tabelle eindeutig sein muss.The following example enforces a restriction that the Name column of the Product table must be unique.

Name nvarchar(100) NOT NULL  
UNIQUE NONCLUSTERED  

D.D. Verwenden von DEFAULT-DefinitionenUsing DEFAULT definitions

Standardwerte stellen jeweils einen Wert bereit (in INSERT- und UPDATE-Anweisungen), wenn kein Wert angegeben ist.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. Die AdventureWorks2012AdventureWorks2012-Datenbank könnte beispielsweise eine Nachschlagetabelle enthalten, in der die verschiedenen Tätigkeiten aufgelistet sind, die Mitarbeiter in dem Unternehmen ausüben können.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. In einer Spalte, in der jede Tätigkeit beschrieben wird, könnte ein Zeichenfolgen-Standardwert eine Beschreibung bereitstellen, falls keine explizite Angabe einer Beschreibung erfolgt.Under a column that describes each job, a character string default could supply a description when an actual description is not entered explicitly.

DEFAULT 'New Position - title not formalized yet'  

Neben Konstanten können DEFAULT-Definitionen auch Funktionen enthalten.In addition to constants, DEFAULT definitions can include functions. Verwenden Sie das folgende Beispiel, um das aktuelle Datum für einen Eintrag zu erhalten.Use the following example to get the current date for an entry.

DEFAULT (getdate())  

Eine Funktion ohne Argumente kann ebenfalls zur Verbesserung der Datenintegrität beitragen.A niladic-function scan can also improve data integrity. Verwenden Sie die Funktion ohne Argumente für USER, um den Benutzer nachzuverfolgen, der eine Zeile einfügt.To keep track of the user that inserted a row, use the niladic-function for USER. Schließen Sie die Funktionen ohne Argumente nicht in Klammern ein.Do not enclose the niladic-functions with parentheses.

DEFAULT USER  

E.E. Verwenden von CHECK-EinschränkungenUsing CHECK constraints

Im folgenden Beispiel wird eine Einschränkung gezeigt, die für Werte gilt, die in die CreditRating-Spalte der Vendor-Tabelle eingegeben werden.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. Die Einschränkung ist nicht benannt.The constraint is unnamed.

CHECK (CreditRating >= 1 and CreditRating <= 5)  

Dieses Beispiel zeigt eine benannte Einschränkung mit Mustereinschränkung für die Zeichendaten, die in eine Spalte einer Tabelle eingegeben werden.This example shows a named constraint with a pattern restriction on the character data entered into a column of a table.

CONSTRAINT CK_emp_id CHECK (emp_id LIKE   
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'   
OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')  

Dieses Beispiel gibt an, dass die Werte in einer speziellen Liste enthalten sein müssen oder einem bestimmten Muster entsprechen müssen.This example specifies that the values must be within a specific list or follow a specified pattern.

CHECK (emp_id IN ('1389', '0736', '0877', '1622', '1756')  
OR emp_id LIKE '99[0-9][0-9]')  

F.F. Anzeigen der vollständigen TabellendefinitionShowing the complete table definition

Im folgenden Beispiel werden die vollständigen Tabellendefinitionen mit allen Einschränkungsdefinitionen für die in der AdventureWorks2012AdventureWorks2012-Datenbank erstellte PurchaseOrderDetail-Tabelle angezeigt.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. Beachten Sie, dass zum Ausführen des Beispiels das Tabellenschema nach dbo geändert wird.Note that to run the sample, the table schema is changed to dbo.

CREATE TABLE dbo.PurchaseOrderDetail  
(  
    PurchaseOrderID int NOT NULL  
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),  
    LineNumber smallint NOT NULL,  
    ProductID int NULL   
        REFERENCES Production.Product(ProductID),  
    UnitPrice money NULL,  
    OrderQty smallint NULL,  
    ReceivedQty float NULL,  
    RejectedQty float NULL,  
    DueDate datetime NULL,  
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL  
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),  
    ModifiedDate datetime NOT NULL   
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),  
    LineTotal  AS ((UnitPrice*OrderQty)),  
    StockedQty  AS ((ReceivedQty-RejectedQty)),  
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber  
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)  
               WITH (IGNORE_DUP_KEY = OFF)  
)   
ON PRIMARY;  

G.G. Erstellen einer Tabelle mit einer XML-Spalte, die mit einer XML-Schemaauflistung typisiert wirdCreating a table with an xml column typed to an XML schema collection

Im folgenden Beispiel wird eine Tabelle mit einer xml-Spalte erstellt, die mit der XML-Schemaauflistung HRResumeSchemaCollection typisiert wird.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. Das Schlüsselwort DOCUMENT gibt an, dass jede Instanz des Datentyps xml in column_name nur ein allgemeines Element enthalten kann.The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

CREATE TABLE HumanResources.EmployeeResumes   
   (LName nvarchar(25), FName nvarchar(25),   
    Resume xml( DOCUMENT HumanResources.HRResumeSchemaCollection) );  

H.H. Erstellen einer partitionierten TabelleCreating a partitioned table

Im folgenden Beispiel wird eine Partitionsfunktion zum Partitionieren einer Tabelle oder eines Indexes in vier Partitionen erstellt.The following example creates a partition function to partition a table or index into four partitions. Anschließend wird im Beispiel ein Partitionsschema erstellt, das die Dateigruppen angibt, die jede der vier Partitionen aufnehmen sollen.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. Schließlich wird eine Tabelle erstellt, die das Partitionsschema verwendet.Finally, the example creates a table that uses the partition scheme. In diesem Beispiel wird davon ausgegangen, dass die Dateigruppen bereits in der Datenbank vorhanden sind.This example assumes the filegroups already exist in the database.

CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 1000) ;  
GO  

CREATE PARTITION SCHEME myRangePS1  
    AS PARTITION myRangePF1  
    TO (test1fg, test2fg, test3fg, test4fg) ;  
GO  

CREATE TABLE PartitionTable (col1 int, col2 char(10))  
    ON myRangePS1 (col1) ;  
GO  

Basierend auf den Werten der col1-Spalte von PartitionTable werden die Partitionen folgendermaßen zugewiesen.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

DateigruppeFilegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
PartitionPartition 11 22 33 44
WerteValues col1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1,000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

I.I. Verwenden des uniqueidentifier-Datentyps in einer SpalteUsing the uniqueidentifier data type in a column

Im folgenden Beispiel wird eine Tabelle mit einer uniqueidentifier-Spalte erstellt.The following example creates a table with a uniqueidentifier column. In dem Beispiel wird eine PRIMARY KEY-Einschränkung verwendet, um zu verhindern, dass Benutzer doppelte Werte in die Tabelle einfügen. Mithilfe der NEWSEQUENTIALID()-Funktion in der DEFAULT-Einschränkung werden Werte für neue Zeilen bereitgestellt.The example uses a PRIMARY KEY constraint to protect the table against users inserting duplicated values, and it uses the NEWSEQUENTIALID() function in the DEFAULT constraint to provide values for new rows. Die ROWGUIDCOL-Eigenschaft wird auf die uniqueidentifier-Spalte angewendet, sodass mit dem $ROWGUID-Schlüsselwort auf sie verwiesen werden kann.The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

CREATE TABLE dbo.Globally_Unique_Data  
    (guid uniqueidentifier   
        CONSTRAINT Guid_Default DEFAULT   
        NEWSEQUENTIALID() ROWGUIDCOL,  
    Employee_Name varchar(60)  
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );  

J.J. Verwenden eines Ausdrucks für eine berechnete SpalteUsing an expression for a computed column

Im folgenden Beispiel wird die Verwendung eines Ausdrucks ((low + high)/2) zum Berechnen der berechneten Spalte myavg verwendet.The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

CREATE TABLE dbo.mytable   
    ( low int, high int, myavg AS (low + high)/2 ) ;  

K.K. Erstellen einer berechneten Spalte basierend auf einer Spalte eines benutzerdefinierten TypsCreating a computed column based on a user-defined type column

Im folgenden Beispiel wird eine Tabelle mit einer Spalte erstellt, die als Spalte des benutzerdefinierten Typs utf8string definiert ist. Hierbei wird vorausgesetzt, dass die Assembly des Typs und der Typ selbst bereits in der aktuellen Datenbank erstellt wurden.The following example creates a table with one column defined as user-defined type utf8string, assuming that the type's assembly, and the type itself, have already been created in the current database. Eine zweite Spalte wird basierend auf utf8string definiert. Hierbei wird die ToString()-Methode von type(class)utf8string verwendet, um einen Wert für die Spalte zu berechnen.A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

CREATE TABLE UDTypeTable   
    ( u utf8string, ustr AS u.ToString() PERSISTED ) ;  

L.L. Verwenden der USER_NAME-Funktion für eine berechnete SpalteUsing the USER_NAME function for a computed column

Im folgenden Beispiel wird die USER_NAME()-Funktion in der myuser_name-Spalte verwendet.The following example uses the USER_NAME() function in the myuser_name column.

CREATE TABLE dbo.mylogintable  
    ( date_in datetime, user_id int, myuser_name AS USER_NAME() ) ;  

M.M. Erstellen einer Tabelle mit einer FILESTREAM-SpalteCreating a table that has a FILESTREAM column

Im folgenden Beispiel wird eine Tabelle mit der FILESTREAM-Spalte Photo erstellt.The following example creates a table that has a FILESTREAM column Photo. Eine Tabelle mit einer oder mehreren FILESTREAM-Spalten muss eine ROWGUIDCOL-Spalte enthalten.If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

CREATE TABLE dbo.EmployeePhoto  
    (  
    EmployeeId int NOT NULL PRIMARY KEY,  
    ,Photo varbinary(max) FILESTREAM NULL  
    ,MyRowGuidColumn uniqueidentifier NOT NULL ROWGUIDCOL  
        UNIQUE DEFAULT NEWID()  
    );  

N.N. Erstellen einer Tabelle, in der Zeilenkomprimierung verwendet wirdCreating a table that uses row compression

Im folgenden Beispiel wird eine Tabelle erstellt, in der Zeilenkomprimierung verwendet wird.The following example creates a table that uses row compression.

CREATE TABLE dbo.T1   
(c1 int, c2 nvarchar(200) )  
WITH (DATA_COMPRESSION = ROW);  

Weitere Beispiele für die Datenkomprimierung finden Sie unter Datenkomprimierung.For additional data compression examples, see Data Compression.

O.O. Erstellen einer Tabelle mit Sparsespalten und einem SpaltensatzCreating a table that has sparse columns and a column set

Anhand der folgenden Beispiele wird gezeigt, wie Sie eine Tabelle mit einer Sparsespalte und eine Tabelle mit zwei Sparsespalten und einem Spaltensatz erstellen.The following examples show to how to create a table that has a sparse column, and a table that has two sparse columns and a column set. In den Beispielen wird die grundlegende Syntax verwendet.The examples use the basic syntax. Komplexere Beispiele finden Sie unter Verwenden von Spalten mit geringer Dichte und Verwenden von Spaltensätzen.For more complex examples, see Use Sparse Columns and Use Column Sets.

In diesem Beispiel wird eine Tabelle erstellt, die eine Sparsespalte enthält.This example creates a table that has a sparse column.

CREATE TABLE dbo.T1  
    (c1 int PRIMARY KEY,  
    c2 varchar(50) SPARSE NULL ) ;  

In diesem Beispiel wird eine Tabelle erstellt, die zwei Sparsespalten und einen Spaltensatz mit dem Namen CSet enthält.This example creates a table that has two sparse columns and a column set named CSet.

CREATE TABLE T1  
    (c1 int PRIMARY KEY,  
    c2 varchar(50) SPARSE NULL,  
    c3 int SPARSE NULL,  
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) ;  

P.P. Erstellen einer datenträgerbasierten temporalen Tabelle mit SystemversionsverwaltungCreating a system-versioned disk-based temporal table

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

In den folgenden Beispielen wird gezeigt, wie Sie temporale Tabellen erstellen, die mit einer neuen Verlaufstabelle verbunden sind, und wie Sie temporale Tabellen erstellen, die mit einer vorhandenen Verlaufstabelle verbunden sind.The following examples show how to create a temporal table linked to a new history table, and how to create a temporal table linked to an existing history table. Beachten Sie, dass der Primärschlüssel der temporalen Tabelle definiert sein muss, damit die Versionsverwaltung durch das System für die Tabelle aktiviert werden kann.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. Beispiele für das Hinzufügen und Entfernen der Versionsverwaltung durch das System bei einer vorhandenen Tabelle finden Sie unter Beispiele für die Versionsverwaltung durch das System.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. Anwendungsfälle finden Sie unter Temporale Tabellen.For use cases, see Temporal Tables.

In diesem Beispiel wird eine neue temporale Tabelle mit einer neuen Verlaufstabelle verbunden.This example creates a new temporal table linked to a new history table.

CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)     
)  
WITH (SYSTEM_VERSIONING = ON);  

In diesem Beispiel wird eine neue temporale Tabelle mit einer vorhandenen Verlaufstabelle verbunden.This example creates a new temporal table linked to an existing history table.

--Existing table   
CREATE TABLE Department_History   
(  
    DepartmentNumber char(10) NOT NULL,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 NOT NULL,   
    SysEndTime datetime2 NOT NULL   
);  
--Temporal table  
CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID INT  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)    
)  
WITH   
    (SYSTEM_VERSIONING = ON   
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )  
    );  

Q.Q. Erstellen einer speicheroptimierten temporalen Tabelle mit SystemversionsverwaltungCreating a system-versioned memory-optimized temporal table

Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x) bis SQL Server 2017SQL Server 2017 und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL-DatenbankAzure SQL Database.

Im folgenden Beispiel wird gezeigt, wie eine speicheroptimierte temporale Tabelle mit Versionsverwaltung durch das System erstellt wird, die mit einer neuen datenträgerbasierten Verlaufstabelle verbunden ist.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

In diesem Beispiel wird eine neue temporale Tabelle mit einer neuen Verlaufstabelle verbunden.This example creates a new temporal table linked to a new history table.

CREATE SCHEMA History  
GO  
CREATE TABLE dbo.Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)     
)  
WITH   
    (  
        MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,  
            SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )   
    );  

In diesem Beispiel wird eine neue temporale Tabelle mit einer vorhandenen Verlaufstabelle verbunden.This example creates a new temporal table linked to an existing history table.

--Existing table   
CREATE TABLE Department_History   
(  
    DepartmentNumber char(10) NOT NULL,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 NOT NULL,   
    SysEndTime datetime2 NOT NULL   
);  
--Temporal table  
CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID INT  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)    
)  
WITH   
    (SYSTEM_VERSIONING = ON   
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )  
    );  

R.R. Erstellen einer Tabelle mit verschlüsselten SpaltenCreating a table with encrypted columns

Im folgenden Beispiel wird eine Tabelle mit zwei verschlüsselten Spalten erstellt.The following example creates a table with two encrypted columns. Weitere Informationen finden Sie unter Immer verschlüsselt &#40;Datenbank-Engine&#41;.For more information, see Always Encrypted (Database Engine).

CREATE TABLE Customers (  
    CustName nvarchar(60)   
        ENCRYPTED WITH   
            (  
             COLUMN_ENCRYPTION_KEY = MyCEK,  
             ENCRYPTION_TYPE = RANDOMIZED,  
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
            ),   
    SSN varchar(11) COLLATE  Latin1_General_BIN2  
        ENCRYPTED WITH   
            (  
             COLUMN_ENCRYPTION_KEY = MyCEK,  
             ENCRYPTION_TYPE = DETERMINISTIC ,  
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
            ),   
    Age int NULL  
);  

S.S. Erstellen eines inlinegefilterten IndexCreate an inline filtered index

Erstellt eine Tabelle mit einem inlinegefilterten Index.Creates a table with an inline filtered index.

  CREATE TABLE t1 
  (
      c1 int,
      index IX1  (c1) WHERE c1 > 0   
 )
GO

T.T. Erstellen einer temporären Tabelle mit einem anonym benannten zusammengesetzten PrimärschlüsselCreate a temporary table with an anonymously named compound primary key

Erstellt eine temporäre Tabelle mit einem anonym benannten zusammengesetzten Primärschlüssel.Creates a table with an anonymously named compound primary key. Dies ist nützlich, um Laufzeitkonflikte zu vermeiden, bei denen zwei, für die ganze Sitzung gültigen temporären Tabellen, jede in einem separaten Modus, den gleichen Namen für eine Einschränkung verwenden.This is useful to avoid run-time conflicts where two session-scoped temp tables, each in a separate session, use the same name for a constraint.

  CREATE TABLE #tmp 
 (
      c1 int,
      c2 int,
      PRIMARY KEY CLUSTERED ([c1], [c2])
 )
GO

Wenn Sie die Einschränkung explizit benennen, generiert die zweite Sitzung einen Fehler, wie z.B.:If you explicitly name the constraint, the second session will generate an error such as:

Msg 2714, Level 16, State 5, Line 1
There is already an object named 'PK_#tmp' in the database.
Msg 1750, Level 16, State 1, Line 1
Could not create constraint or index. See previous errors.

Das Problem ergibt sich aus der Tatsache, dass der Name der temporären Tabelle zwar eindeutig ist, der Name der Einschränkung aber nicht.The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

Weitere Informationen finden Sie unterSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
COLUMNPROPERTY (Transact-SQL) COLUMNPROPERTY (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE VIEW (Transact-SQL) CREATE VIEW (Transact-SQL)
Datentypen (Transact-SQL) Data Types (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL) sys.dm_sql_referencing_entities (Transact-SQL)
DROP TABLE (Transact-SQL) DROP TABLE (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE TYPE (Transact-SQL) CREATE TYPE (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helpconstraint (Transact-SQL) sp_helpconstraint (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sp_spaceused (Transact-SQL)sp_spaceused (Transact-SQL)