table (Transact-SQL)

Ein besonderer Datentyp, der zum Speichern eines Resultsets für die spätere Verarbeitung verwendet werden kann. table wird primär zum temporären Speichern einer Reihe von Zeilen verwendet, die als Resultset einer Tabellenwertfunktion zurückgegeben werden.

HinweisHinweis

Verwenden Sie zum Deklarieren von Variablen des table-Datentyps die Anweisung DECLARE @local_variable.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax


table_type_definition ::= 
    TABLE ( { column_definition | table_constraint } [ ,...n ] ) 

column_definition ::= 
        column_name scalar_data_type 
    [ COLLATE collation_definition ] 
    [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] 
    [ ROWGUIDCOL ] 
    [ column_constraint ] [ ...n ] 

column_constraint ::= 
    { [ NULL | NOT NULL ] 
    | [ PRIMARY KEY | UNIQUE ] 
    | CHECK ( logical_expression ) 
    } 

table_constraint ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )
     | CHECK ( logical_expression ) 
     } 

Argumente

  • table_type_definition
    Dieselbe Teilmenge von Informationen, die zum Definieren einer Tabelle in CREATE TABLE verwendet wird. Die Tabellendeklaration schließt Spaltendefinitionen, Namen, Datentypen und Einschränkungen ein. Die einzigen zulässigen Einschränkungstypen sind PRIMARY KEY, UNIQUE KEY und NULL.

    Weitere Informationen zur Syntax finden Sie unter CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) und DECLARE @local\_variable (Transact-SQL).

  • collation_definition
    Die Sortierung einer Spalte, die aus einem Microsoft Windows-Gebietsschema und einer Vergleichsart, einem Windows-Gebietsschema und der Binärschreibweise oder einer MicrosoftSQL Server-Sortierung besteht. Wenn collation_definition nicht angegeben ist, erbt die Spalte die Sortierung der aktuellen Datenbank. Wenn die Spalte als CLR-benutzerdefinierter Typ (Common Language Runtime) definiert ist, erbt die Spalte die Sortierung des benutzerdefinierten Typs.

Hinweise

Funktionen und Variablen können mit dem Typ table deklariert werden. table-Variablen können in Funktionen, gespeicherten Prozeduren und Batches verwendet werden.

Wichtiger HinweisWichtig

Abfragen, die table-Variablen ändern, generieren keine Pläne für die parallele Abfrageausführung. Die Leistung kann beeinträchtigt sein, wenn sehr große table-Variablen oder table-Variablen in komplexen Abfragen geändert werden. Erwägen Sie in vergleichbaren Situationen stattdessen die Verwendung temporärer Tabellen. Weitere Informationen finden Sie unter CREATE TABLE (Transact-SQL). Abfragen, die table-Variablen lesen, ohne sie zu ändern, können weiterhin parallelisiert werden.

table-Variablen bieten die folgenden Vorteile:

  • Eine table-Variable verhält sich wie eine lokale Variable. Sie hat einen fest definierten Bereich. Dies ist die Funktion, die gespeicherte Prozedur oder der Batch, in der bzw. dem sie deklariert ist.

    Innerhalb dieses Bereichs kann eine table-Variable wie eine reguläre Tabelle verwendet werden. Sie kann überall angewendet werden, wo eine Tabelle oder ein Tabellenausdruck in SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen verwendet wird. table kann jedoch nicht in der folgenden Anweisung verwendet werden:

    SELECT select_list INTO table_variable   
    

    Für table-Variablen wird automatisch am Ende der Funktion, der gespeicherten Prozedur oder des Batches, in der bzw. dem sie definiert sind, ein Cleanup ausgeführt.

  • CHECK-Einschränkungen, DEFAULT-Werte und berechnete Spalten in der table-Typdeklaration können keine benutzerdefinierten Funktionen aufrufen.

  • In gespeicherten Prozeduren verwendete table-Variablen führen zu weniger Neukompilierungen der gespeicherten Prozeduren als die Verwendung von temporären Tabellen.

  • Transaktionen, an denen table-Variablen beteiligt sind, dauern nur so lange wie die Aktualisierung der table-Variablen. Daher sind für table-Variablen weniger Sperr- und Protokollierungsressourcen erforderlich.

Die explizite Erstellung von Indizes für table-Variablen ist nicht möglich, zudem werden für table-Variablen keine Statistiken geführt. In einigen Fällen kann die Leistung möglicherweise verbessert werden, indem stattdessen temporäre Tabellen verwendet werden, die Indizes und Statistiken unterstützen. Weitere Informationen zu temporären Tabellen finden Sie unter CREATE TABLE (Transact-SQL).

Auf Variablen vom Typ table kann anhand des Namens in der FROM-Klausel eines Batches verwiesen werden, wie im folgenden Beispiel gezeigt wird:

SELECT Employee_ID, Department_ID FROM @MyTableVar

Außerhalb einer FROM-Klausel muss ein Alias für Verweise auf table-Variablen verwendet werden, wie im folgenden Beispiel gezeigt wird:

SELECT EmployeeID, DepartmentID 
FROM @MyTableVar m
JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND
   m.DepartmentID = Employee.DepartmentID)

Zuweisungsvorgänge zwischen table-Variablen werden nicht unterstützt. Darüber hinaus wirken sich Transaktionsrollbacks nicht auf table-Variablen aus, da diese Variablen einen beschränkten Bereich haben und kein Teil der permanenten Datenbank sind.