TabellenTables

Anwendungsbereich:Applies to: JaSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) und höher JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseAnwendungsbereich:Applies to: JaSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) and later JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance JaAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics JaParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Tabellen sind Datenbankobjekte, die sämtliche in einer Datenbank enthaltenen Daten umfassen.Tables are database objects that contain all the data in a database. Die Daten in den Tabellen sind, ähnlich wie in einer Kalkulationstabelle, logisch in Zeilen und Spalten angeordnet.In tables, data is logically organized in a row-and-column format similar to a spreadsheet. Jede Zeile stellt einen eindeutigen Datensatz und jede Spalte ein Feld im Datensatz dar.Each row represents a unique record, and each column represents a field in the record. Eine Tabelle, die z. B. die Angestelltendaten für ein Unternehmen enthält, könnte eine Zeile für jeden Angestellten sowie Spalten enthalten, die Informationen zu einzelnen Angestellten angeben, wie z. B. die Mitarbeiternummer, den Namen, die Adresse, die Berufsbezeichnung und die private Telefonnummer.For example, a table that contains employee data for a company might contain a row for each employee and columns representing employee information such as employee number, name, address, job title, and home telephone number.

  • Die Anzahl der Tabellen in einer Datenbank ist nur durch die in einer Datenbank zulässige Anzahl an Objekten beschränkt (2.147.483.647).The number of tables in a database is limited only by the number of objects allowed in a database (2,147,483,647). Eine standardmäßige benutzerdefinierte Tabelle kann bis zu 1.024 Spalten enthalten.A standard user-defined table can have up to 1,024 columns. Die Anzahl der Zeilen in der Tabelle wird nur durch die Speicherkapazität des Servers beschränkt.The number of rows in the table is limited only by the storage capacity of the server.

  • Sie können der Tabelle und jeder Spalte in der Tabelle Eigenschaften zuweisen, um die zulässigen Daten und weitere Eigenschaften zu steuern.You can assign properties to the table and to each column in the table to control the data that is allowed and other properties. Sie können z. B. Einschränkungen für eine Spalte erstellen, um keine NULL-Werte zuzulassen, oder einen Standardwert bereitstellen, wenn ein Wert nicht angegeben wird. Sie können außerdem eine Schlüsseleinschränkung für die Tabelle zuweisen, die Eindeutigkeit erzwingt oder eine Beziehung zwischen Tabellen definiert.For example, you can create constraints on a column to disallow null values or provide a default value if a value is not specified, or you can assign a key constraint on the table that enforces uniqueness or defines a relationship between tables.

  • Die Daten in der Tabelle können entweder nach Zeile oder Seite komprimiert werden.The data in the table can be compressed either by row or by page. Durch die Datenkomprimierung können mehrere Zeilen auf einer Seite gespeichert werden.Data compression can allow more rows to be stored on a page. Weitere Informationen finden Sie unter Data Compression.For more information, see Data Compression.

Typen von TabellenTypes of Tables

Neben der Standardrolle der grundlegenden benutzerdefinierten Tabellen bietet SQL ServerSQL Server die folgenden Typen von Tabellen, die innerhalb einer Datenbank speziellen Zwecken dienen:Besides the standard role of basic user-defined tables, SQL ServerSQL Server provides the following types of tables that serve special purposes in a database.

Partitionierte TabellenPartitioned Tables

Partitionierte Tabellen sind Tabellen, deren Daten horizontal in Einheiten aufgeteilt sind, die über mehrere Dateigruppen innerhalb einer Datenbank verteilt sein können.Partitioned tables are tables whose data is horizontally divided into units which may be spread across more than one filegroup in a database. Durch die Partitionierung sind große Tabellen oder Indizes leichter zu verwalten, denn Sie können dadurch schnell und effizient auf Datenteilmengen zugreifen und sie verwalten, während die Integrität der gesamten Sammlung erhalten bleibt.Partitioning makes large tables or indexes more manageable by letting you access or manage subsets of data quickly and efficiently, while maintaining the integrity of the overall collection. Standardmäßig unterstützt SQL Server 2019 (15.x)SQL Server 2019 (15.x) bis zu 15.000 Partitionen.By default, SQL Server 2019 (15.x)SQL Server 2019 (15.x) supports up to 15,000 partitions. Weitere Informationen finden Sie unter partitionierte Tabellen und Indizes.For more information, see Partitioned Tables and Indexes.

Temporäre TabellenTemporary Tables

Temporäre Tabellen werden in tempdbgespeichert.Temporary tables are stored in tempdb. Es gibt zwei Arten von temporären Tabellen: lokale und globale temporäre Tabellen.There are two types of temporary tables: local and global. Sie unterscheiden sich hinsichtlich ihrer Namen, ihrer Sichtbarkeit und ihrer Verfügbarkeit.They differ from each other in their names, their visibility, and their availability. Lokale temporäre Tabellen weisen als erstes Zeichen ihres Namens ein einzelnes Nummernzeichen (#) auf. Sie sind nur im Rahmen der aktuellen Verbindung des Benutzers sichtbar und werden gelöscht, sobald der Benutzer die Verbindung mit der Instanz von SQL ServerSQL Servertrennt.Local temporary tables have a single number sign (#) as the first character of their names; they are visible only to the current connection for the user, and they are deleted when the user disconnects from the instance of SQL ServerSQL Server. Globale temporäre Tabellen weisen als erste Zeichen ihres Namens zwei Nummernzeichen (##) auf. Nachdem sie erstellt wurden, sind sie für jeden Benutzer sichtbar, und sie werden gelöscht, nachdem alle Benutzer, die auf diese Tabelle verweisen, die Verbindung mit der Instanz von SQL ServerSQL Servergetrennt haben.Global temporary tables have two number signs (##) as the first characters of their names; they are visible to any user after they are created, and they are deleted when all users referencing the table disconnect from the instance of SQL ServerSQL Server.

Weniger Neukompilierungen für Workloads mit temporären Tabellen für mehrere BereicheReduced recompilations for workloads using temporary tables across multiple scopes

Bei allen Datenbank-Kompatibilitätsgraden verringert SQL Server 2019 (15.x)SQL Server 2019 (15.x) die Neukompilierungen für Arbeitsauslastungen mit temporären Tabellen für mehrere Bereiche.SQL Server 2019 (15.x)SQL Server 2019 (15.x) under all database compatibility levels reduces recompilations for workloads using temporary tables across multiple scopes. Dieses Feature ist in Azure SQL-Datenbank beim Datenbank-Kompatibilitätsgrad 150 für alle Bereitstellungsmodelle ebenfalls aktiviert.This feature is also enabled in Azure SQL Database under database compatibility level 150 for all deployment models. Vor der Einführung dieses Features, konnte das Verweisen auf eine temporäre Tabelle mit einer DML-Anweisung (SELECT, INSERT, UPDATE, DELETE) zu einer Neukompilierung der DML-Anweisung bei jeder Ausführung führen, wenn die temporäre Tabelle in einem Batch im äußeren Bereich erstellt wurde.Prior to this feature, when referencing a temporary table with a data manipulation language (DML) statement (SELECT, INSERT, UPDATE, DELETE), if the temporary table was created by an outer scope batch, this would result in a recompile of the DML statement each time it is executed. Durch dieses Update führt SQL Server zusätzliche einfache Überprüfungen durch, um unnötige Neukompilierungen zu vermeiden:With this improvement, SQL Server performs additional lightweight checks to avoid unnecessary recompilations:

  • Überprüfung, ob es sich bei dem Modul im äußeren Bereich, das zur Kompilierzeit zur Erstellung der temporären Tabelle verwendet wurde, um das gleiche Modul handelt, das für nachfolgende Ausführungen verwendet wurdeCheck if the outer-scope module used for creating the temporary table at compile time is the same one used for consecutive executions.
  • Nachverfolgung von Änderungen an der Datendefinitionssprache (Data Definition Language, DDL), die bei der ersten Kompilierung vorgenommen wurden, und Vergleich mit den DDL-Vorgängen für nachfolgende AusführungenKeep track of any data definition language (DDL) changes made at initial compilation and compare them with DDL operations for consecutive executions.

Dadurch können überflüssige Neukompilierungen vermieden und der CPU-Aufwand reduziert werden.The end result is a reduction in extraneous recompilations and CPU-overhead.

SystemtabellenSystem Tables

SQL ServerSQL Server speichert die Daten, welche die Konfiguration des Servers sowie alle seine Tabellen definieren, in einem bestimmten Satz von Tabellen, die als Systemtabellen bezeichnet werden.stores the data that defines the configuration of the server and all its tables in a special set of tables known as system tables. Benutzer können die Systemtabellen nicht direkt abfragen oder aktualisieren.Users cannot directly query or update the system tables. Die in den Systemtabellen enthaltenen Informationen werden über die Systemsichten zur Verfügung gestellt.The information in the system tables is made available through the system views. Weitere Informationen finden Sie unter Systemsichten (Transact-SQL).For more information, see System Views (Transact-SQL).

Breite TabellenWide Tables

Breite Tabellen verwenden Sparsespalten , um die möglichen Spalten einer Tabelle auf 30.000 zu erhöhen.Wide tables use sparse columns to increase the total of columns that a table can have to 30,000. Spalten mit geringer Dichte sind gewöhnliche Spalten, die einen optimierten Speicher für NULL-Werte haben.Sparse columns are ordinary columns that have an optimized storage for null values. Spalten mit geringer Dichte reduzieren die Speicherplatzanforderungen von NULL-Werten auf Kosten eines erhöhten Aufwands, um Werte ungleich NULL abzurufen.Sparse columns reduce the space requirements for null values at the cost of more overhead to retrieve nonnull values. Eine breite Tabelle besitzt einen definierten Spaltensatz, bei dem es sich um eine nicht typisierte XML-Darstellung handelt, die alle Sparsespalten einer Tabelle in einer strukturierten Ausgabe kombiniert.A wide table has defined a column set, which is an untyped XML representation that combines all the sparse columns of a table into a structured output. Die Anzahl der Indizes und Statistiken wird ebenfalls auf 1.000 bzw. 30.000 erhöht.The number of indexes and statistics is also increased to 1,000 and 30,000, respectively. Die maximale Größe einer breiten Tabelle beträgt normalerweise 8.019 Byte.The maximum size of a wide table row is 8,019 bytes. Deshalb sollten die meisten Daten einer Zeile NULL sein.Therefore, most of the data in any particular row should be NULL. Für eine breite Tabelle beträgt die maximale Anzahl von Spalten ohne geringe Dichte zuzüglich der berechneten Spalten weiterhin 1.024.The maximum number of nonsparse columns plus computed columns in a wide table remains 1,024.

Bei breiten Tabellen treten folgende Leistungsauswirkungen auf:Wide tables have the following performance implications.

  • Breite Tabellen können die Kosten für die Verwaltung der Indizes in der Tabelle erhöhen.Wide tables can increase the cost to maintain indexes on the table. Es ist ratsam, die Anzahl an Indizes für eine breite Tabelle auf die Indizes zu beschränken, die für die Geschäftslogik erforderlich sind.We recommend that the number of indexes on a wide table be limited to the indexes that are required by the business logic. Wenn die Anzahl von Indizes zunimmt, gilt dies auch für die Anforderungen an DML-Kompilierzeit und Arbeitsspeicher.As the number of indexes increases, so does the DML compile-time and memory requirement. Bei nicht gruppierten Indizes sollte es sich um gefilterte Indizes handeln, die auf Datenteilmengen angewendet werden.Nonclustered indexes should be filtered indexes that are applied to data subsets. Weitere Informationen finden Sie unter erstellen gefilterter Indizes.For more information, see Create Filtered Indexes.

  • Anwendungen können breiten Tabellen dynamisch Spalten hinzufügen und daraus entfernen.Applications can dynamically add and remove columns from wide tables. Wenn Spalten hinzugefügt oder entfernt werden, werden kompilierte Abfragepläne ebenfalls als ungültig erklärt.When columns are added or removed, compiled query plans are also invalidated. Es ist ratsam, eine Anwendung gemäß der vorhergesagten Arbeitsauslastung zu entwerfen, damit Schemaänderungen minimiert werden.We recommend that you design an application to match the projected workload so that schema changes are minimized.

  • Wenn Daten einer breiten Tabelle hinzugefügt oder daraus entfernt werden, kann dies die Leistung beeinträchtigen.When data is added and removed from a wide table, performance can be affected. Anwendungen müssen für die vorhergesagte Arbeitsauslastung entworfen werden, damit Änderungen an den Tabellendaten minimiert werden.Applications must be designed for the projected workload so that changes to the table data is minimized.

  • Beschränken Sie die Ausführung von DML-Anweisungen für eine breite Tabelle, bei denen mehrere Zeilen eines Gruppierungsschlüssels aktualisiert werden.Limit the execution of DML statements on a wide table that update multiple rows of a clustering key. Diese Anweisungen können für die Kompilierung und Ausführung beträchtliche Speicherressourcen erfordern.These statements can require significant memory resources to compile and execute.

  • Partitionswechselvorgänge für breite Tabellen können langsam sein und für die Verarbeitung ggf. eine große Menge an Arbeitsspeicher erfordern.Switch partition operations on wide tables can be slow and might require large amounts of memory to process. Die Leistungs- und Arbeitsspeicheranforderungen sind proportional zur Gesamtzahl der Spalten in der Quell- und Zielpartition.The performance and memory requirements are proportional to the total number of columns in both the source and target partitions.

  • Updatecursor, die bestimmte Spalten in einer breiten Tabelle aktualisieren, sollten die Spalten explizit in der FOR UPDATE-Klausel aufführen.Update cursors that update specific columns in a wide table should list the columns explicitly in the FOR UPDATE clause. Dies trägt zur Optimierung der Leistung bei der Verwendung von Cursorn bei.This will help optimize performance when you use cursors.

Allgemeine TabellentasksCommon Table Tasks

Die folgende Tabelle enthält Links zu häufigen Tasks, die dem Erstellen oder Ändern einer Tabelle zugeordnet sind.The following table provides links to common tasks associated with creating or modifying a table.

TabellentasksTable Tasks ThemaTopic
Beschreibt, wie eine Tabelle erstellt wird.Describes how to create a table. Erstellen von Tabellen (Datenbank-Engine)Create Tables (Database Engine)
Beschreibt, wie eine Tabelle gelöscht wird.Describes how to delete a table. Löschen von Tabellen (Datenbank-Engine)Delete Tables (Database Engine)
Beschreibt, wie eine neue Tabelle erstellt wird, die einige oder alle Spalten einer vorhandenen Tabelle enthalten.Describes how to create a new table that contains some or all of the columns in an existing table. Duplizieren von TabellenDuplicate Tables
Beschreibt, wie eine Tabelle umbenannt wird.Describes how to rename a table. Umbenennen von Tabellen (Datenbank-Engine)Rename Tables (Database Engine)
Beschreibt, wie die Eigenschaften der Tabelle angezeigt werden.Describes how to view the properties of the table. Anzeigen der TabellendefinitionView the Table Definition
Beschreibt, wie ermittelt wird, ob andere Objekte, z. B. eine Sicht oder gespeicherte Prozedur, von einer Tabelle abhängen.Describes how to determine whether other objects such as a view or stored procedure depend on a table. Anzeigen der Abhängigkeiten einer TabelleView the Dependencies of a Table

Die folgende Tabelle enthält Links zu häufigen Tasks, die dem Erstellen oder Ändern von Spalten in einer Tabelle zugeordnet sind.The following table provides links to common tasks associated with creating or modifying columns in a table.

SpaltentasksColumn Tasks ThemaTopic
Beschreibt, wie einer vorhandenen Tabelle Spalten hinzugefügt werden.Describes how to add columns to an existing table. Hinzufügen von Spalten zu einer Tabelle (Datenbank-Engine)Add Columns to a Table (Database Engine)
Beschreibt, wie Spalten aus einer Tabelle gelöscht werden.Describes how to delete columns from a table. Spalten aus einer Tabelle löschenDelete Columns from a Table
Beschreibt, wie der Name einer Spalte geändert wird.Describes how to change the name of a column. Umbenennen von Spalten (Datenbank-Engine)Rename Columns (Database Engine)
Beschreibt, wie Spalten einer Tabelle in eine andere Tabelle kopiert werden. Sie können entweder nur die Spaltendefinition oder die Definition und Daten kopieren.Describes how to copy columns from one table to another, copying either just the column definition, or the definition and data. Kopieren von Spalten aus einer Tabelle in eine andere (Datenbank-Engine)Copy Columns from One Table to Another (Database Engine)
Beschreibt, wie eine Spaltendefinition durch Ändern des Datentyps oder anderer Eigenschaften geändert wird.Describes how to modify a column definition, by changing the data type or other property. Ändern von Spalten (Datenbank-Engine)Modify Columns (Database Engine)
Beschreibt, wie die Reihenfolge, in der die Spalten angezeigt werden, geändert wird.Describes how to change the order in which the columns appear. Ändern der Spaltenreihenfolge einer TabelleChange Column Order in a Table
Beschreibt, wie eine berechnete Spalte in einer Tabelle erstellt wird.Describes how to create a computed column in a table. Angeben von berechneten Spalten in einer TabelleSpecify Computed Columns in a Table
Beschreibt, wie ein Standardwert für eine Spalte angegeben wird.Describes how to specify a default value for a column. Dieser Wert wird verwendet, wenn kein anderer Wert angegeben wird.This value is used if another value is not supplied. Angeben von Standardwerten für SpaltenSpecify Default Values for Columns

Weitere InformationenSee Also

Primärschlüssel- und FremdschlüsseleinschränkungenUNIQUE- und CHECK-EinschränkungenPrimary and Foreign Key Constraints Unique Constraints and Check Constraints