table (Transact-SQL)

Type de données spécial qui peut être utilisé pour stocker un jeu de résultats pour un traitement ultérieur. table est principalement utilisé pour le stockage temporaire d'un ensemble de lignes retournées sous forme de jeu de résultats d'une fonction de type table.

[!REMARQUE]

Pour déclarer des variables de type table, utilisez DECLARE @local_variable.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe


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

Arguments

  • table_type_definition
    Même sous-ensemble d'informations que celui utilisé pour définir une table dans CREATE TABLE. La déclaration de table inclut des définitions de colonnes, des noms, des types de données et des contraintes. Les seuls types de contraintes autorisés sont PRIMARY KEY, UNIQUE KEY et NULL.

    Pour plus d'informations sur la syntaxe, consultez CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) et DECLARE @local\_variable (Transact-SQL).

  • collation_definition
    Classement de la colonne composé de paramètres régionaux Microsoft Windows et d'un style de comparaison, de paramètres régionaux Windows et d'une notation binaire, ou d'un classement MicrosoftSQL Server. Si l'argument collation_definition n'est pas spécifié, la colonne hérite du classement par défaut de la base de données active. Ou, si la colonne est définie comme un type CLR (Common Language Runtime) défini par l'utilisateur, elle hérite du classement du type défini par l'utilisateur.

Notes

Les fonctions et les variables peuvent être déclarées selon le type table. Les variables de type table peuvent être utilisées dans des fonctions, des procédures stockées et des traitements.

Important

Les requêtes qui modifient des variables de table ne génèrent pas de plans d'exécution parallèles. Les performances peuvent être affectées lorsque des variables de table de grande taille ou figurant dans des requêtes complexes sont modifiées. Dans ces situations, envisagez d'utiliser des tables temporaires à la place. Pour plus d'informations, consultez CREATE TABLE (Transact-SQL). Il est toujours possible d'effectuer une mise en parallèle des requêtes qui lisent des variables de table sans les modifier.

Les variables de table présentent les avantages suivants :

  • Une variable de type table se comporte comme une variable locale. Elle possède une étendue bien définie. Il s'agit de la fonction, procédure stockée ou traitement dans lequel elle est déclarée.

    Dans les limites de son étendue, une variable de type table peut être utilisée comme une table normale. Elle peut s'appliquer partout où une table, ou expression de table, est utilisée dans les instructions SELECT, INSERT, UPDATE et DELETE. Cependant, une variable table ne peut pas être utilisée dans les instructions suivantes :

    SELECT select_list INTO table_variable   
    

    Les variables table sont automatiquement nettoyées à la fin de la fonction, de la procédure stockée ou du traitement dans lequel elles sont définies.

  • Les contraintes CHECK, les valeurs DEFAULT et les colonnes calculées dans la déclaration de type table ne peuvent pas appeler des fonctions définies par l'utilisateur.

  • Les variables table utilisées dans des procédures stockées aboutissent à moins de recompilations de ces dernières que les tables temporaires.

  • La durée de vie d'une transaction impliquant une variable table est simplement égale à celle d'une mise à jour effectuée sur cette variable. De ce fait, les variables table requièrent moins de ressources de verrouillage et de consignation.

Il est impossible de créer explicitement des index sur des variables de table, et aucune statistique concernant ces variables n'est calculée. Dans ces situations, les performances peuvent s'améliorer en utilisant les tables temporaires à la place, car elles prennent en charge les index et les statistiques. Pour plus d'informations sur les tables temporaires, consultez CREATE TABLE (Transact-SQL).

Les variables table peuvent être référencées par leur nom dans la clause FROM d'un traitement, comme dans l'exemple suivant :

SELECT Employee_ID, Department_ID FROM @MyTableVar

En dehors d'une clause FROM, les variables table peuvent être référencées en utilisant un alias, tel que le montre l'exemple suivant :

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

L'opération d'affectation entre les variables table n'est pas prise en charge. En outre, étant donné que les variables table ont une portée limitée et qu'elles ne font pas partie de la base de données persistante, elles ne sont pas affectées par les annulations de transaction.