Einführung in SQL: Druckversion: Grundlagen

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL) 10/22/; Minuten Lesedauer Beitragende. In diesem Artikel. GILT FÜR: SQL Server (ab ) Azure SQL-Datenbank Azure SQL Data Warehouse Parallel Data Warehouse APPLIES TO: SQL Server (starting with ) Azure SQL Database Azure SQL Data Warehouse Parallel Data Warehouse.

Im folgenden Beispiel wird die Änderungsnachverfolgung für die Person. Ist der Wert eines Parameters ein Schlüsselwort, muss das Schlüsselwort in doppelte Anführungszeichen eingeschlossen werden. In fast allen Abfragen werden Informationen aus mehreren Tabellen zusammengefasst.

Inhaltsverzeichnis

Hinweis. Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt. This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server.

While the context switch to the database user is active, any attempt to access resources outside the database will cause the statement to fail. Hierzu zählen USE- Datenbankanweisungen , verteilte Abfragen und Abfragen, die mit drei- oder vierteiligen Bezeichnern auf eine andere Datenbank verweisen. This includes USE database statements, distributed queries, and queries that reference another database by using three- or four-part identifiers.

Is a valid user or login name. For more information, see Specifying a User or Login Name later in this topic. Is a constant string that contains the command to be passed through to the linked server.

SQL Server Beschreibt die von den ausgeführten Anweisungen zurückgegebenen Resultsets. Describes the result sets returned by the executed statements. Wenn die Anzahl der Resultsets abweicht, tritt ein Fehler auf, und der Batch wird abgebrochen. If the number of result sets differs, an error occurs and the batch is aborted. Ein Parameter ist nicht Teil einer Transaktion. Deshalb wird der Wert eines Parameters, der in einer Transaktion geändert wird, nicht wieder auf seinen ursprünglichen Wert zurückgesetzt, wenn für diese Transaktion später ein Rollback ausgeführt wird.

A parameter is not part of a transaction; therefore, if a parameter is changed in a transaction that is later rolled back, the value of the parameter does not revert to its previous value.

Der Wert, der an den Aufrufer zurückgegeben wird, ist immer der Wert zu dem Zeitpunkt, zu dem das Modul beendet wird. The value returned to the caller is always the value at the time the module returns. Nesting occurs when one module calls another or executes managed code by referencing a common language runtime CLR module, user-defined type, or aggregate. Die Schachtelungsebene wird um eins erhöht, wenn das aufgerufene Modul oder der Verweis auf den verwalteten Code mit der Ausführung beginnt, und wird wieder um eins erniedrigt, wenn das aufgerufene Modul oder der Verweis auf den verwalteten Code beendet ist.

The nesting level is incremented when the called module or managed code reference starts execution, and it is decremented when the called module or managed code reference has finished. Ein Überschreiten der maximal möglichen 32 Schachtelungsebenen führt zu einem Fehler der gesamten Aufrufskette. Exceeding the maximum of 32 nesting levels causes the complete calling chain to fail.

Wird beim Verwenden von Cursorvariablen eine Prozedur ausgeführt, die eine Cursorvariable übergibt, für die ein Cursor zugeordnet ist, tritt ein Fehler auf. When you use cursor variables, if you execute a procedure that passes in a cursor variable with a cursor allocated to it an error occurs.

Sie werden physisch in der Ressourcendatenbank gespeichert, werden aber logisch im sys-Schema jeder Systemdatenbank und benutzerdefinierten Datenbank angezeigt. They are physically stored in the Resource database , but logically appear in the sys schema of every system and user-defined database.

Es wird empfohlen, den Namen der gespeicherten Prozedur mit dem sys-Schemanamen zu qualifizieren, wenn Sie eine gespeicherte Prozedur ausführen, entweder in einem Batch oder innerhalb eines Moduls, wie etwa eine benutzerdefinierte gespeicherte Prozedur oder Funktion.

When you execute a system stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with the sys schema name. Es wird empfohlen, den Namen der gespeicherten Prozedur mit master. When you execute a system extended stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with master.

Es wird empfohlen, den Namen der gespeicherten Prozedur mit einem Schemanamen zu qualifizieren, wenn Sie eine benutzerdefinierte gespeicherte Prozedur ausführen, entweder in einem Batch oder innerhalb eines Moduls, wie etwa eine benutzerdefinierte gespeicherte Prozedur oder Funktion. When you execute a user-defined stored procedure, either in a batch or inside a module such as a user-defined stored procedure or function, we recommend that you qualify the stored procedure name with a schema name.

Wir raten davon ab, für eine benutzerdefinierte gespeicherte Prozedur den gleichen Namen wie für eine gespeicherte Systemprozedur zu verwenden.

We do not recommend that you name a user-defined stored procedure with the same name as a system stored procedure. For more information about executing stored procedures, see Execute a Stored Procedure. Deshalb müssen lange Zeichenfolgen für die dynamische Ausführung verkettet werden.

This requires concatenating large strings for dynamic execution. In SQL Server SQL Server , the varchar max and nvarchar max data types can be specified that allow for character strings to be up to 2 gigabytes of data.

For example, after the EXEC in this following statement is run, the database context is master. Andernfalls wird für die Anweisung ein Fehler gemeldet. Unless the caller is the database owner or is a member of the sysadmin fixed server role, the principal must exist even when the user is accessing the database or instance of SQL Server SQL Server through a Windows group membership.

Stellen Sie sich z. For example, assume the following conditions: Geben Sie einen Anmeldenamen oder einen Benutzer an, der die mindestens erforderlichen Berechtigungen zum Ausführen der in der Anweisung oder im Modul definierten Vorgänge aufweist.

Specify a login or user that has the least privileges required to perform the operations that are defined in the statement or module. For example, do not specify a login name, which has server-level permissions, if only database-level permissions are required; or do not specify a database owner account unless those permissions are required. Der Besitzer kann die Berechtigungen an andere Benutzer übertragen. Wird ein Modul ausgeführt, das eine Zeichenfolge ausführt, werden Berechtigungen im Kontext des Benutzers geprüft, der das Modul ausführt, nicht im Kontext des Benutzers, der das Modul erstellt hat.

When a module is run that executes a string, permissions are checked in the context of the user who executes the module, not in the context of the user who created the module. However, if the same user owns the calling module and the module being called, EXECUTE permission checking is not performed for the second module.

If the module accesses other database objects, execution succeeds when you have EXECUTE permission on the module and one of the following is true: Die Variable kann bei der Ausführung auch ausdrücklich benannt werden: The variable can be explicitly named in the execution: Falls es sich bei der folgenden Anweisung um die erste Anweisung in einem Batch oder in einem osql - oder sqlcmd -Skript handelt, ist die Angabe von EXEC nicht erforderlich.

If the following is the first statement in a batch or an osql or sqlcmd script, EXEC is not required. Sie übergibt zwei Parameter: It passes two parameters: Das folgende Beispiel erstellt eine Variable, die den Namen einer gespeicherten Prozedur darstellt. The following example creates a variable that represents a stored procedure name. Das folgende Beispiel erstellt eine gespeicherte Prozedur mit Standardwerten für den ersten und dritten Parameter. The following example creates a stored procedure with default values for the first and third parameters.

When the procedure is run, these defaults are inserted for the first and third parameters when no value is passed in the call or when the default is specified. Das folgende Beispiel übergibt eine Befehlszeichenfolge an einen Remoteserver. The following example passes a command string to a remote server.

Die returnstatus -Variable wird zum Speichern des Werts verwendet, der von der Funktion zurückgegeben wird. It uses the variable returnstatus to store the value returned by the function. Diese Funktion erwartet einen Eingabeparameter, Status. The function expects one input parameter, Status. Dieser ist als Datentyp tinyint definiert. This is defined as a tinyint data type. Zunächst wird der Oracle-Server als Verbindungsserver hinzugefügt und der Anmeldename für den Verbindungsserver erstellt.

The example begins by adding the Oracle server as a linked server and creating linked server login. Andernfalls kann die Anweisung nicht ausgeführt werden. User1 must exist as a user in the database and must have permission to create tables in the Sales schema, or the statement fails. Im folgenden Beispiel wird eine Befehlszeichenfolge an einen Remoteserver übergeben, indem ein Fragezeichen?

The following example passes a command string to a remote server by using a question mark? Some of the previous examples executed EXEC dbo. Wenn Sie eine Anweisung ausführen, die mehr als ein Resultset zurückgibt, definieren Sie jedes erwartete Resultset.

When executing a statement that returns more than one result set, define each expected result set. The following example in AdventureWorks AdventureWorks creates a procedure that returns two result sets. Ausführen einer gespeicherten Prozedur: Executing a stored procedure: Aufrufen einer gespeicherten Prozedur, deren Name zur Laufzeit bestimmt wird: Calling a stored procedure with name determined at runtime: Aufrufen einer gespeicherten Prozedur aus einer gespeicherten Prozedur: Calling a stored procedure from within a stored procedure: Executing a SQL string: Ausführen einer geschachtelten Zeichenfolge: Executing a nested string: Executing a string variable: Im folgenden Beispiel wird eine Prozedur mit Parametern erstellt, und es werden drei Möglichkeiten zur Ausführung der Prozedur veranschaulicht: The following example creates a procedure with parameters and demonstrates 3 ways to execute the procedure: Erzwingt, dass ein neuer Abfrageplan kompiliert, verwendet und nach der Ausführung des Moduls verworfen wird.

Forces a new plan to be compiled, used, and discarded after the module is executed. Falls bereits ein Abfrageplan für das Modul vorhanden ist, verbleibt dieser Plan im Cache. If there is an existing query plan for the module, this plan remains in the cache.

Verwenden Sie diese Option, wenn der von Ihnen angegebene Parameter atypisch ist oder sich die Daten erheblich geändert haben. Use this option if the parameter you are supplying is atypical or if the data has significantly changed.

Diese Option wird nicht bei erweiterten gespeicherten Prozeduren verwendet. This option is not used for extended stored procedures. Es wird empfohlen, diese Option nur selten zu verwenden, da sie aufwändig ist. We recommend that you use this option sparingly because it is expensive. The corresponding indexes, or index partitions, must also reside in the same filegroup.

Darüber hinaus gelten weitere Einschränkungen für das Wechseln von Partitionen. Many additional restrictions apply to switching partitions. Diese enthalten benutzerdefinierte Typvariablen und benutzerdefinierte Funktionen. These include user-defined type variables and user-defined functions. Eine partitionierte Tabelle mit einem gruppierten Columnstore-Index verhält sich wie ein partitionierter Heap: A partitioned table with a clustered columstore index behaves like a partitioned heap: Deaktiviert oder aktiviert die Systemversionierung einer Tabelle.

Either disables system versioning of a table or enables system versioning of a table. Das System überprüft, ob die Einschränkungsanfoderungen des Datentyps, der NULL-Zulässigkeit und des Primärschlüssels für die Systemversionierung eingehalten wurden, um die Systemversionierung einer Tabelle zu ermöglichen. To enable system versioning of a table, the system verifies that the datatype, nullability constraint, and primary key constraint requirements for system versioning are met.

Die Verbindung wird zwischen der aktuellen Tabelle und der angegebenen Tabelle hergestellt. 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. Performing the data consistency check is the default. Weitere Informationen finden Sie unter Temporal Tables. For more information, see Temporal Tables. Gibt die endliche oder unendliche Vermerkdauer für Verlaufsdaten in temporalen Tabellen an. Specifies finite or infinte retention for historical data in temporal table. Wenn sie weggelassen wird, wird von einer unendlichen Vermerkdauer ausgegangen.

If omitted, infinite retention is assumed. Gibt die zulässigen Methoden der Sperrenausweitung für eine Tabelle an. Specifies the allowed methods of lock escalation for a table. Lock escalation will be done at table-level granularity regardless whether the table is partitioned or not partitioned. TABLE is the default value. Prevents lock escalation in most cases.

Sperren auf Tabellenebene sind jedoch nicht völlig ausgeschlossen. Table-level locks are not completely disallowed. For example, when you are scanning a table that has no clustered index under the serializable isolation level, Datenbank-Engine Database Engine must take a table lock to protect data integrity. Erstellt alle Partitionen neu, wenn die Komprimierungseinstellungen für die Partition geändert werden.

Rebuilds all partitions when changing the partition compression settings. All options apply to a table with a clustered index. Wenn die Tabelle nicht über einen gruppierten Index verfügt, wird die Heapstruktur nur von einigen der Optionen beeinflusst. If the table does not have a clustered index, the heap structure is only affected by some of the options. When a specific compression setting is not specified with the REBUILD operation, the current compression setting for the partition is used.

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: Table or specified partitions are not compressed. Gilt nicht für columnstore-Tabellen. This does not apply to columnstore tables.

Table or specified partitions are compressed by using row compression. Table or specified partitions are compressed by using page compression.

Gilt nur für columnstore-Tabellen. Applies only to columnstore tables. Nachdem die Daten wiederhergestellt wurden, sind sie weiterhin mit der columnstore-Komprimierung komprimiert, die für alle columnstore-Tabellen verwendet wird. When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore tables.

Dies sind Tabellen, die mit einem gruppierten columnstore-Index gespeichert wurden. Applies only to columnstore tables, which are tables stored with a clustered columnstore index. Dies empfiehlt sich bei der Archivierung und in Situationen, in denen es auf eine geringere Speicherbelegung und nicht auf den zusätzlichen Zeitaufwand für das Speichern und Abrufen ankommt.

This can be used for archival, or for other situations that require less storage and can afford more time for storage and retrieval. Wenn die Tabelle nicht über einen gruppierten Index verfügt, werden bei Änderungen an der Datenkomprimierung der Heap und die nicht gruppierten Indizes neu erstellt. If the table does not have a clustered index, changing the data compression rebuilds the heap and the nonclustered indexes. Weitere Informationen zur Datenkomprimierung finden Sie unter Datenkomprimierung.

For more information about compression, see Data Compression. Specifies whether a single partition of the underlying tables and associated indexes are available for queries and data modification during the index operation. A S-lock on the table is required in the beginning of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. Obwohl beide Sperren kurze Metadatensperren sind, muss insbesondere die Sch-M-Sperre auf den Abschluss aller blockierenden Transaktionen warten.

Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. Während der Wartezeit sperrt die Sch-M-Sperre alle anderen Transaktionen, die an dieser Sperre warten, wenn sie auf die gleiche Tabelle zugreifen. During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table. Der Name des Spaltensatzes. Is the name of the column set. Bei einem Spaltensatz handelt es sich um eine nicht typisierte XML-Darstellung, die alle Sparsespalten einer Tabelle in einer strukturierten Ausgabe kombiniert.

A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. Sie können einer Tabelle, die Sparsespalten enthält, keinen Spaltensatz hinzufügen. A column set cannot be added to a table that contains sparse columns. For more information about column sets, see Use Column Sets. Aktiviert oder deaktiviert die systemdefinierten Einschränkungen für eine FileTable. Enables or disables the system-defined constraints on a FileTable.

Kann nur mit einer FileTable verwendet werden. Can only be used with a FileTable. Gibt den Windows-kompatiblen FileTable-Verzeichnisnamen an. Specifies the Windows-compatible FileTable directory name. This name should be unique among all the FileTable directory names in the database. Uniqueness comparison is case-insensitive, regardless of SQL collation settings. Enables or disables Stretch Database for a table. Weitere Informationen finden Sie unter Stretch Database. For more info, see Stretch Database.

For more info about enabling Stretch for a table, see Enable Stretch Database for a table. 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. For more info, see Enable Stretch Database for a database. Wenn Sie Stretch für eine Tabelle deaktivieren, haben Sie zwei Möglichkeiten für die Remotedaten, die bereits zu Azure migriert wurden.

When you disable Stretch for a table, you have two options for the remote data that has already been migrated to Azure.

For more info, see Disable Stretch Database and bring back remote data. To disable Stretch for a table and copy the remote data for the table from Azure back to SQL Server, run the following command.

Dieser Befehl kann nicht abgebrochen werden. This command can't be canceled. Dieser Vorgang verursacht Datenübertragungskosten und kann nicht abgebrochen werden. This operation incurs data transfer costs, and it can't be canceled.

Weitere Informationen finden Sie unter Datenübertragungen — Preisdetails. For more info, see Data Transfers Pricing Details.

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

Nachdem Sie Stretch Database für eine Tabelle deaktiviert haben, wird die Datenmigration beendet und die Abfrageergebnisse enthalten keine Ergebnisse aus der Remotetabelle mehr.

After you disable Stretch Database for a table, data migration stops and query results no longer include results from the remote table. Auch wenn Stretch deaktiviert wird, wird die Remotetabelle nicht entfernt.

Disabling Stretch does not remove the remote table. Wenn Sie die Remotetabelle löschen möchten, müssen Sie sie mithilfe des Azure-Verwaltungsportals löschen. If you want to delete the remote table, you have to drop it by using the Azure management portal. 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. For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function Stretch Database. 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. Wenn Sie kein Filterprädikat angeben, wird die gesamte Tabelle migriert. If you don't specify a filter predicate, the entire table is migrated. For more info, see Pause and resume data migration Stretch Database. Bei der Onlineindexneuerstellung muss auf blockierende Vorgänge für diese Tabelle gewartet werden.

An online index rebuild has to wait for blocking operations on this table. Continue waiting for the lock with normal regular priority. Löscht die Spalte oder Einschränkung nur, wenn diese bereits vorhanden ist. Conditionally drops the column or constraint only if it already exists. If data exists in the column, the new size cannot be smaller than the maximum size of the data. Die an der Tabelle vorgenommenen Änderungen werden protokolliert und sind vollständig wiederherstellbar.

The modifications made to the table are logged and fully recoverable. Starting with SQL Server Dies bedeutet, dass der Vorgang unabhängig von der Anzahl von Zeilen in der Tabelle nahezu sofort abgeschlossen wird. This means that the operation is completed almost instantaneously regardless of the number of rows in the table. Dies liegt daran, dass die vorhandenen Zeilen in der Tabelle während des Vorgangs nicht aktualisiert werden.

Stattdessen wird der Standardwert nur in den Metadaten der Tabelle gespeichert und der Wert in Abfragen, die auf diese Zeilen zugreifen, nur nach Bedarf gesucht. This is because the existing rows in the table are not updated during the operation; instead, the default value is stored only in the metadata of the table and the value is looked up as needed in queries that access these rows. Dieses Verhalten ist automatisch.

Eine Laufzeitkonstante ist ein Ausdruck, der zur Laufzeit unabhängig vom Determinismus den gleichen Wert für jede Zeile in der Tabelle erzeugt. A runtime constant is an expression that produces the same value at runtime for each row in the table regardless of its determinism.

Während die vorhandenen Zeilen auf den in Metadaten gespeicherten Wert verweisen, wird der Standardwert für alle neu eingefügten Zeilen in der Zeile gespeichert, ohne einen anderen Wert für die Spalte anzugeben. While the existing rows reference the value stored in metadata, the default value is stored on the row for any new rows that are inserted and do not specify another value for the column.

Der in Metadaten gespeicherte Standardwert wird in eine vorhandene Zeile verschoben, wenn die Zeile aktualisiert wird auch wenn die tatsächliche Spalte nicht in der UPDATE-Anweisung angegeben wird oder wenn die Tabelle oder der gruppierte Index neu erstellt wird. The default value stored in metadata is moved to an existing row when the row is updated even if the actual column is not specified in the UPDATE statement , or if the table or clustered index is rebuilt.

Spalten vom Typ varchar max , nvarchar max , varbinary max , xml , text , ntext , image , hierarchyid , geometry , geography oder CLR UDTS können nicht in einem Onlinevorgang hinzugefügt werden. Columns of type varchar max , nvarchar max , varbinary max , xml , text , ntext , image , hierarchyid , geometry , geography , or CLR UDTS, cannot be added in an online operation. A column cannot be added online if doing so causes the maximum possible row size to exceed the 8, byte limit.

Die Spalte wird in diesem Fall als Offlinevorgang hinzugefügt. The column is added as an offline operation in this case. Grad an Parallelität und durch die aktuelle Arbeitsauslastung bestimmt. Wenn das Datenbank-Engine Database Engine erkennt, dass das System ausgelastet ist, wird der Grad an Parallelität für den Vorgang automatisch reduziert, bevor mit der Ausführung der Anweisung begonnen wird.

If the Datenbank-Engine Database Engine detects that the system is busy, the degree of parallelism of the operation is automatically reduced before statement execution starts. You can manually configure the number of processors that are used to run the statement by specifying the MAXDOP option.

Die Partitionierung der Tabelle selbst kann jedoch mit der Anweisung nicht geändert werden. However, this statement cannot be used to change the way the table itself is partitioned. Zudem können Sie den Datentyp einer Spalte einer partitionierten Tabelle nicht ändern. Additionally, you cannot change the data type of a column of a partitioned table.

Das Hinzufügen einer Spalte ist zulässig. Adding a column is allowed. Das Entfernen oder Ändern einer Spalte, die Bestandteil einer schemagebundenen Sicht ist, ist dagegen nicht zulässig. However, removing or changing a column that participates in any schema-bound view is not allowed. Das Hinzufügen oder Entfernen von Triggern für Basistabellen wird durch das Erstellen einer schemagebundenen Sicht, die auf die Tabellen verweist, nicht beeinflusst. Adding or removing triggers on base tables is not affected by creating a schema-bound view that references the tables.

Als Teil einer Einschränkung erstellte Indizes werden gelöscht, wenn die Einschränkung gelöscht wird. Indexes created as part of a constraint are dropped when the constraint is dropped. Alle auf einer Spalte basierenden Indizes und Einschränkungen müssen entfernt werden, bevor die Spalte entfernt werden kann.

All indexes and constraints based on a column must be removed before the column can be removed. Wenn eine Einschränkung, für die ein gruppierter Index erstellt wurde, gelöscht wird, werden die Datenzeilen, die auf der Blattebene des gruppierten Indexes gespeichert waren, in einer nicht gruppierten Tabelle gespeichert. When a constraint that created a clustered index is deleted, the data rows that were stored in the leaf level of the clustered index are stored in a nonclustered table.

You can drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option. Zum Löschen eines gruppierten Indexes ist temporärer Speicherplatz im Umfang des vorhandenen gruppierten Indexes erforderlich.

Temporary disk space equal to the size of the existing clustered index is required to drop a clustered index. Dieser zusätzliche Speicherplatz wird nach Abschluss des Vorgangs freigegeben. This additional space is released as soon as the operation is completed. Für diese Funktionalität bestehen einige Einschränkungen, und sie kann deaktiviert werden. This functionality has some restrictions and can be disabled.

Weitere Informationen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken. Für Systemtabellen ist die Komprimierung nicht verfügbar. System tables cannot be enabled for compression. For a more information about data compression, see Data Compression.

Für partitionierte Tabellen gelten die folgenden Einschränkungen: The following restrictions apply to partitioned tables: When dropping NTEXT columns, the cleanup of the deleted data occurs as a serialized operation on all rows. Das kann einige Zeit dauern.

This can require a substantial time. Dieses Verfahren kann mit parallelen Vorgängen ausgeführt werden und kostet deutlich weniger Zeit.

This can be performed with parallel operations and can be much faster. Um die DDL-Anweisung für eine Onlineindexneuerstellung auszuführen, müssen alle aktiven blockierenden Transaktionen, die für eine bestimmte Tabelle ausgeführt werden, abgeschlossen sein.

In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Wenn die Onlineindexneuerstellung ausgeführt wird, werden alle neuen Transaktionen, die zur Ausführung in dieser Tabelle bereit sind, blockiert.

When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. Obwohl die Sperre für die Onlineindexneuerstellung nur kurz dauert, kann das Warten auf den Abschluss aller noch offenen Transaktionen und das Blockieren aller neuen, zu startenden Transaktionen für eine bestimmte Tabelle den Durchsatz beeinträchtigen, eine Verlangsamung oder einen Ausfall der Arbeitsauslastung verursachen und den Zugriff auf die zugrunde liegende Tabelle deutlich einschränken.

Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. In allen drei Fällen gilt: Bei früheren Versionen wurde durch die Angabe des Formats "server. In earlier versions specifying the format server. Die Angabe des Formats ". Um das Problem zu beheben, vermeiden Sie die Verwendung eines vierteiligen Präfixes.

To resolve the problem, remove the use of a 4-part prefix. Alle verschobenen Daten erben die Sicherheitseinstellungen der Zieltabelle. Any data that is switched inherits the security of the target table. Examples in this section demonstrate adding columns and constraints to a table. In the new column, each row will have NULL. Im folgenden Beispiel wird einer vorhandenen Spalte in der Tabelle eine Einschränkung hinzugefügt.

The following example adds a constraint to an existing column in the table. Die Spalte hat einen Wert, der die Einschränkung verletzt. The column has a value that violates the constraint. The following example creates a table with two columns and inserts a value into the first column, and the other column remains NULL.

Um zu überprüfen, ob der Standardwert angewendet wird, wird ein weiterer Wert in die erste Spalte eingefügt und die Tabelle abgefragt. To verify that the default is applied, another value is inserted into the first column, and the table is queried. Im folgenden Beispiel werden mehrere Spalten mit Einschränkungen hinzugefügt, die mit der neuen Spalte definiert werden. The following example adds several columns with constraints defined with the new column. Jede Zeile in der Tabelle besitzt neue inkrementelle Werte in der Identitätsspalte.

Each row in the table has new incremental values in the identity column. Der entstehende gruppierte Index hat denselben Namen wie die Einschränkung.

The resulting clustered index will have the same name as the constraint. In diesem ähnlichen Beispiel werden Seitenkomprimierung und der gruppierte Primärschlüssel angewandt. This similar example applies page compression while applying the clustered primary key. In den folgenden Beispielen wird gezeigt, wie Sparsespalten der Tabelle T1 hinzugefügt und geändert werden. The following examples show adding and modifying sparse columns in table T1. Der Code zum Erstellen der Tabelle T1 lautet wie folgt.

The code to create table T1 is as follows. Um eine zusätzliche Sparsespalte C5 hinzuzufügen, führen Sie die folgende Anweisung aus. To add an additional sparse column C5 , execute the following statement. To convert the C4 non-sparse column to a sparse column, execute the following statement.

To convert the C4 sparse column to a nonsparse column, execute the following statement. In den folgenden Beispielen wird veranschaulicht, wie eine Spalte der Tabelle T2 hinzugefügt wird. The following examples show adding a column to table T2. Sie können einer Tabelle, die bereits Sparsespalten enthält, keinen Spaltensatz hinzufügen.

A column set cannot be added to a table that already contains sparse columns. Der Code zum Erstellen der Tabelle T2 lautet wie folgt. The code to create table T2 is as follows. The following statement adds an encrypted column named PromotionCode. In den Beispielen in diesem Abschnitt wird das Löschen von Spalten und Einschränkungen veranschaulicht.

The examples in this section demonstrate dropping columns and constraints. Im ersten Beispiel wird eine Tabelle durch Entfernen einer Spalte geändert. The first example modifies a table to remove a column. Im zweiten Beispiel werden mehrere Spalten entfernt.

The second example removes multiple columns. Im zweiten Beispiel werden zwei Einschränkungen und eine einzelne Spalte entfernt. The second example removes two constraints and a single column.

The following example increases the size of a varchar column and the precision and scale of a decimal column. Because the columns contain data, the column size can only be increased. Im folgenden Beispiel wird gezeigt, wie die Sortierung einer Spalte geändert wird. The following example shows how to change the collation of a column. Zuerst wird eine Tabelle mit der Standardbenutzersortierung erstellt. First, a table is created table with the default user collation.

Beachten Sie, dass der Datentyp erforderlich ist, auch wenn er nicht geändert wird. Note that the data type is required, even though it is not changed.

The following example shows how to encrypt a column using Always Encrypted with secure enclaves. Zunächst wird eine Tabelle ohne jegliche verschlüsselte Spalten erstellt. First, a table is created without any encrypted columns. Next, column 'C2' is encrypted with a column encryption key, named CEK1, and randomized encryption. Beachten Sie, dass für die erfolgreiche Ausführung der unten stehenden Anweisung Folgendes erfüllt sein muss: Note that for the below statement to succeed: Die Beispiele in diesem Abschnitt veranschaulichen, wie die Definition einer Tabelle geändert wird.

The examples in this section demonstrate how to alter the definition of a table. Im folgenden Beispiel wird die Komprimierung einer nicht partitionierten Tabelle geändert.

The following example changes the compression of a nonpartitioned table. Der Heap oder der gruppierte Index wird neu erstellt. The heap or clustered index will be rebuilt. Wenn die Tabelle ein Heap ist, werden alle nicht gruppierten Indizes neu erstellt.

If the table is a heap, all nonclustered indexes will be rebuilt. Im folgenden Beispiel wird die Komprimierung einer partitionierten Tabelle geändert. The following example changes the compression of a partitioned table.

Mit der folgenden alternativen Syntax werden im gleichen Vorgang alle Partitionen in der Tabelle neu erstellt. The same operation using the following alternate syntax causes all partitions in the table to be rebuilt. Weitere Beispiele für die Datenkomprimierung finden Sie unter Datenkomprimierung. For additional data compression examples, see Data Compression. Im folgenden Beispiel wird eine columnstore-Tabellenpartition weiter komprimiert, indem ein zusätzlicher Komprimierungsalgorithmus angewendet wird.

The following example further compresses a columnstore table partition by applying an additional compression algorithm. This reduces the table to a smaller size, but also increases the time required for storage and retrieval. This is useful for archiving or for situations that require less space and can afford more time for storage and retrieval.

SQL Server Im folgenden Beispiel wird eine partitionierte Tabelle erstellt, wobei vorausgesetzt wird, dass das myRangePS1 -Partitionsschema bereits in der Datenbank erstellt wurde. The following example creates a partitioned table, assuming that partition scheme myRangePS1 is already created in the database. Im folgenden Beispiel wird die Sperrenausweitung auf die Partitionsebene einer partitionierten Tabelle ermöglicht. The following example enables lock escalation to the partition level on a partitioned table.

Im folgenden Beispiel wird die Änderungsnachverfolgung für die Person. The following example enables change tracking on the Person. Im folgenden Beispiel werden die Änderungsnachverfolgung sowie die Verfolgung von Spalten aktiviert, die während einer Änderung aktualisiert werden.

The following example enables change tracking and enables the tracking of the columns that are updated during a change. The following example disables change tracking on the Person. Im folgenden Beispiel wird eine Einschränkung deaktiviert, die die in den Daten akzeptierten Gehälter begrenzt. The following example disables a constraint that limits the salaries accepted in the data.

The following example shows how to perform an online index rebuild specifying the low priority wait options. Mit den folgenden vier Beispielen können Sie sich mit der Syntax für die Systemversionierung vertraut machen. The following four examples will help you become familiar with the syntax for using system versioning.

Im Folgenden wird veranschaulicht, wie Sie die Systemversionierung einer vorhandenen Tabelle hinzufügen und eine neue Verlaufstabelle erstellen.