Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Introduction aux tables temporaires dans SQL Server

Dans SQL Server, une table temporaire est un certain type de table qui existe jusqu'à ce qu'elle sorte de la portée (à moins qu'elle ne soit explicitement supprimée).

Ceci est différent d'une table régulière (persistante), où la table régulière existe en permanence dans votre base de données jusqu'à ce que vous la supprimiez explicitement.

Avantages des tables temporaires

Les tables temporaires peuvent être utiles lorsque vous devez exécuter plusieurs requêtes sur un sous-ensemble d'un ensemble de résultats plus large. Vous pouvez utiliser SELECT... INTO avec un WHERE clause pour placer le sous-ensemble de données dans une table temporaire. Vous pouvez ensuite exécuter des requêtes sur cette table temporaire. Cela vous évite d'avoir à filtrer constamment les données de l'ensemble de résultats plus large lorsque vous effectuez plusieurs requêtes.

Les tables temporaires peuvent également être utiles du point de vue des autorisations. Si vous devez travailler avec des données d'une table persistante mais que vous ne disposez pas des autorisations suffisantes pour effectuer toutes les opérations dont vous avez besoin, vous pouvez copier ces données dans une table temporaire (en supposant que vous avez un accès en lecture) et faire tout ce que vous devez faire. .

Les tables temporaires peuvent également être utilisées si vous n'êtes pas autorisé à créer une table (persistante) dans la base de données actuelle.

Un autre aspect pratique des tables temporaires est que vous pouvez les utiliser pour exécuter des requêtes ad hoc rapides lors de l'exécution d'un test, de la démonstration d'un concept, etc., sans vous soucier de laisser une traînée de tables persistantes que vous avez oublié de supprimer.

TempDB

Les tables temporaires sont créées dans TempDB base de données. Il s'agit d'une base de données système qui stocke des objets utilisateur temporaires tels que des tables et des index temporaires, des procédures stockées temporaires, des variables de table, des tables renvoyées dans des fonctions table et des curseurs. Il stocke également les objets internes créés par le moteur de base de données et les magasins de versions.

Tout utilisateur peut créer des tables temporaires dans TempDB . Vous n'avez pas besoin de configurer d'autorisations spéciales pour TempDB accès.

Syntaxe

Les tables temporaires sont créées en utilisant la même syntaxe que les tables régulières. La différence est que les tables temporaires sont préfixées avec un ou deux signes dièse (# ):

  • Les tables temporaires locales sont précédées d'un seul signe dièse (par exemple, #table_name )
  • Les tables temporaires globales sont précédées d'un double signe dièse (par exemple, ##table_name )

Exemple de création d'un local table temporaire :

CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Exemple de création d'un global table temporaire :

CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Les tables temporaires locales ne sont visibles que dans la session en cours et les tables temporaires globales sont visibles pour toutes les sessions.

Combien de temps dure une table temporaire ?

Les tables temporaires sont automatiquement supprimées lorsqu'elles sortent de la portée.

Vous pouvez également supprimer explicitement une table temporaire en utilisant DROP TABLE .

Le moment exact où une table temporaire est automatiquement supprimée dépend du fait que la table temporaire est locale ou globale, et si elle est créée ou non dans une procédure stockée.

  • Local :Une table temporaire locale créée dans une procédure stockée est supprimée automatiquement lorsque la procédure stockée est terminée. La table peut être référencée par n'importe quelle procédure stockée imbriquée exécutée par la procédure stockée qui a créé la table. La table ne peut pas être référencée par le processus qui a appelé la procédure stockée qui a créé la table.

    Toutes les autres tables temporaires locales sont supprimées automatiquement à la fin de la session en cours.

  • Mondial :les tables temporaires globales sont automatiquement supprimées lorsque la session qui a créé la table se termine et que toutes les autres tâches ont cessé de les référencer. L'association entre une tâche et une table n'est maintenue que pendant la durée de vie d'une seule instruction T-SQL. Cela signifie qu'une table temporaire globale est supprimée à la fin de la dernière instruction T-SQL qui faisait activement référence à la table lorsque la session de création s'est terminée.

Schéma

Toutes les tables temporaires sont créées dans le dbo schéma. Si vous spécifiez explicitement un schéma différent, il est ignoré.

Clés étrangères

Les contraintes FOREIGN KEY ne sont pas appliquées sur les tables temporaires. Si vous spécifiez une clé étrangère, la table est toujours créée, juste sans clé étrangère. Un message vous en informera.