2009-10-20 6 views

Répondre

11

Les tables temporaires sont comme les tables ordinaires dans la plupart des caractéristiques, sauf qu'elles vont dans TempDB au lieu de la base de données courante et disparaissent après une portée limitée (selon qu'elles sont basées sur des sessions temporaires ou globales). Les tables Temp sont enregistrées dans le journal des transactions, avec toutes les implications que cela implique: otoh, vous pouvez également ajouter autant d'index ou de vues, ou de triggers, ou tout ce que vous voulez à une table temporaire exactement comme vous le feriez

Les variables de tableau sont une sorte de table abrégée en mémoire (elles utilisent également la base de données temporaire) .Les modifications ne sont pas consignées (cela améliore les performances) mais vous ne pouvez obtenir qu'un seul index (car les indices ne peuvent pas être créés après la déclaration initiale s ECLARATION, le seul indice que vous pouvez créer une variable de table est celle qui peut être inclus dans le tableau initial déclaration de variable ...

Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20)) 

En raison de ces caractéristiques, les tables temporaires sont meilleur choix pour les grandes tables, (large et avec beaucoup de lignes), et/ou qui subiront plus d'un modèle d'accès pendant leur durée de vie, alors que les variables de table sont meilleures quand vous avez besoin d'une table très étroite (table de clés seulement, ou clé avec une seule colonne de données) toujours accessible par cette touche indexée ...

+0

L'optimiseur suppose également qu'une variable de table a toujours exactement 1 ligne. – erikkallen

+2

@erikkallen, ne le savais pas; s'il vous plaît, référence? –

+2

"vous ne pouvez obtenir qu'un seul indice, (parce que les index ne peuvent pas être créés après l'instruction de déclaration initiale" - et quand l'instruction de déclaration initiale comprend plus d'une construction logique connue pour créer physiquement un index 'UNIQUE's:' DECLARE @T TABLE (ID1 INTEGER NON NUL UNIQUE, ID2 INTEGER NOT NULL UNIQUE); 'Si cela va sûrement créer deux index, non? – onedaywhen

1
  1. Il n'y a pas journal pour les variables de table
  2. Les variables de table ont seulement une portée locale (vous ne pouvez pas accéder à la même variable de table à partir de différentes procédures)
  3. Les procédures avec tables temporaires ne peuvent pas être pré-compilées

Pour plus de détails, voir this topic.

1
  1. Les variables de table ont une portée bien définie. Ils seront effacés automatiquement à la fin du lot (c'est-à-dire le lot actuel d'instructions) où la table temporaire sera visible pour la session en cours et les procédures stockées imbriquées. La table temporaire globale sera visible pour toutes les sessions.

  2. Les variables de table sont créées à l'aide de l'instruction Declare. Nous ne pouvons pas créer variable de table using

    select * into @tableVariableName 
    

    Mais nous pouvons créer la table temporaire à l'aide instruction create table ainsi que la déclaration

    select * into #tempTableName 
    
  3. Dans SQL Server à partir de 2008, nous pouvons passer à la variable de table un paramètre pour les procédures stockées. Mais nous ne pouvons pas passer la table temporaire en tant que paramètre à la procédure stockée.

  4. Nous pouvons utiliser la variable de table à l'intérieur de l'UDF (fonction définie par l'utilisateur) mais nous ne pouvons pas utiliser la table temporaire à l'intérieur de l'UDF.

Questions connexes