table (Transact-SQL)

Tipo di dati speciale utilizzabile per archiviare un set di risultati per l'elaborazione successiva. table viene utilizzato principalmente come spazio di archiviazione temporanea di un set di righe restituito come set di risultati di una funzione con valori di tabella.

[!NOTA]

Per dichiarare variabili di tipo table, utilizzare DECLARE @local_variable.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi


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 ) 
     } 

Argomenti

  • table_type_definition
    Stesso subset di informazioni utilizzate per definire una tabella nell'istruzione CREATE TABLE. La dichiarazione di tabella include definizioni di colonna, nomi, tipi di dati e vincoli. Gli unici tipi di vincoli consentiti sono PRIMARY KEY, UNIQUE KEY e NULL.

    Per ulteriori informazioni sulla sintassi, vedere CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) e DECLARE @local\_variable (Transact-SQL).

  • collation_definition
    Regole di confronto della colonna composte da un'impostazione internazionale di Microsoft Windows e uno stile di confronto, un'impostazione internazionale di Windows e la notazione binaria oppure dalle regole di confronto di MicrosoftSQL Server. Se collation_definition viene omesso, la colonna eredita le regole di confronto del database corrente. Se invece viene specificata come tipo CLR (Common Language Runtime) definito dall'utente, la colonna eredita le regole di confronto del tipo definito dall'utente.

Osservazioni

È possibile dichiarare funzioni e variabili di tipo table. Le variabili di tipo table sono utilizzabili in funzioni, stored procedure e batch.

Nota importanteImportante

Per le query che modificano le variabili di table non vengono generati piani di esecuzione parallela. La modifica di variabili di table di dimensioni molto grandi o di variabili di table in query complesse può influire sulle prestazioni. In questi casi, valutare l'utilizzo di tabelle temporanee in alternativa. Per ulteriori informazioni, vedere CREATE TABLE (Transact-SQL). Le query che leggono le variabili di table senza modificarle possono comunque essere eseguite in parallelo.

Le variabili di table offrono i vantaggi seguenti:

  • Le variabili table funzionano in modo analogo alle variabili locali. Queste variabili hanno un ambito ben definito, corrispondente alla funzione, alla stored procedure o al batch in cui sono dichiarate.

    All'interno del proprio ambito, le variabili table possono essere utilizzate come normali tabelle in tutti i casi in cui è possibile utilizzare una tabella o espressione di tabella in istruzioni SELECT, INSERT, UPDATE e DELETE. Le variabili table, tuttavia, non possono essere utilizzate nell'istruzione seguente:

    SELECT select_list INTO table_variable   
    

    Le variabili table vengono cancellate automaticamente alla fine della funzione, stored procedure o batch in cui sono definite.

  • Non è possibile chiamare funzioni definite dall'utente dai vincoli CHECK, dai valori DEFAULT e dalle colonne calcolate nella dichiarazione del tipo table.

  • Quando si utilizzano variabili table in stored procedure, il numero di ricompilazioni delle stored procedure risulta minore rispetto al numero eseguito con tabelle temporanee.

  • La durata delle transazioni che includono variabili table corrisponde solo alla durata dell'aggiornamento della variabile table. Le variabili table richiedono pertanto un numero di risorse di blocco e di registrazione minore.

Non è possibile creare indici in modo esplicito su variabili di table e per le variabili di table non vengono mantenute statistiche. In alcuni casi, è possibile ottenere un miglioramento delle prestazioni utilizzando tabelle temporanee, che supportano indici e statistiche. Per ulteriori informazioni sulle tabelle temporanee, vedere CREATE TABLE (Transact-SQL).

È possibile fare riferimento alle variabili table per nome nella clausola FROM di un batch, come illustrato nell'esempio seguente:

SELECT Employee_ID, Department_ID FROM @MyTableVar

All'esterno di una clausola FROM, è necessario fare riferimento alle variabili table tramite un alias, come illustrato nell'esempio seguente:

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

Non sono supportate operazioni di assegnazione tra variabili table. Inoltre, le operazioni di rollback delle transazioni non hanno alcun effetto sulle variabili table, in quanto tali variabili hanno un ambito limitato e non fanno parte del database persistente.