Tables temporaires locales et globales dans SQL Server

Quelle est la différence entre les tables temporaires locales et globales dans SQL Server?

117
demandé sur Blorgbeard 2010-05-27 15:58:27

4 réponses

Je trouve cette explication assez claire (c'est une copie pure de Technet):

Il existe deux types de tables temporaires: local et global. Les tables temporaires locales ne sont visibles que par leurs créateurs lors de la même connexion à une instance de SQL Server que lors de la création ou de la référence des tables. Les tables temporaires locales sont supprimées après que L'utilisateur se soit déconnecté de L'instance de SQL Server. Les tables temporaires globales sont visibles pour tout utilisateur et toute connexion après ils sont créés et supprimés lorsque tous les utilisateurs qui font référence à la table se déconnectent de L'instance de SQL Server.

86
répondu Don 2014-02-23 22:32:26
  • Variables du tableau (DECLARE @t TABLE) sont visibles uniquement pour la connexion qui la crée, et sont supprimés lorsque le lot ou la procédure stockée se termine.

  • Les tables temporaires Locales (CREATE TABLE #t) sont visibles que par le connexion qui le crée, et sont supprimés lorsque la connexion est fermé.

  • Les tables temporaires Globales (CREATE TABLE ##t) sont visibles par tout le monde, et sont supprimés lorsque toutes les connexions qui les avons référencé ont fermé.

  • La base de données Tempdb tables permanentes (USE tempdb CREATE TABLE t) sont visibles à tout le monde, et sont supprimés lorsque le serveur est redémarré.

273
répondu Anthony Faull 2014-08-10 14:30:45

Citation de livres en ligne:

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

Les tables temporaires sont automatiquement supprimées lorsqu'elles sortent de la portée, sauf si elles sont explicitement supprimées en utilisant DROP TABLE:

  • une table temporaire locale créée dans une procédure stockée est automatiquement supprimée lorsque la procédure stockée est terminée. La table peut être référencée par toutes les procédures stockées imbriquées exécutées par 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.
  • 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'un seul Transact-instruction SQL. Cela signifie qu'une table temporaire globale est supprimée à la fin de la dernière instruction Transact-SQL qui référençait activement la table à la fin de la session de création.
11
répondu Christian Hayter 2010-05-27 12:06:43

1.) une table temporaire locale n'existe que pour la durée d'une connexion ou, si elle est définie dans une instruction composée, pour la durée de l'instruction composée.

Les tables temporaires locales ne sont disponibles que pour la session SQL Server ou connexion (signifie utilisateur unique) qui a créé les tables. Ce sont automatiquement supprimé lorsque la session qui a créé les tables a été fermé. Le nom de table temporaire local est regardé avec un seul hachage ("#") signer.

CREATE TABLE #LocalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Name','Address');
GO
Select * from #LocalTemp

La portée de la table temporaire locale existe à la session en cours de l'utilisateur de la fenêtre de requête actuelle. Si vous fermez le courant fenêtre de requête ou d'ouvrir une nouvelle fenêtre de requête et va essayer de trouver ci-dessus créé table temporaire, il vous donnera l'erreur.


2.) une table temporaire globale reste dans la base de données en permanence, mais les lignes n'existent que dans une connexion donnée. Lorsque la connexion est fermée, les données dans la table temporaire globale disparaît. Cependant, la définition de la table reste avec la base de données pour l'accès lorsque la base de données est ouverte la prochaine fois.

Les tables temporaires globales sont disponibles pour toutes les connexions (signifie tout l'utilisateur). Ceux-ci peuvent être créés par N'importe quel SQL Utilisateur de connexion de serveur et ceux-ci sont automatiquement supprimés lorsque tous les connexions SQL Server ont été fermées. Tableau temporaire Global le nom est regardé avec un double hachage ("##") signer.

CREATE TABLE ##GlobalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Name','Address');
GO
Select * from ##GlobalTemp

Les tables temporaires globales sont visibles pour toutes les connexions SQL Server alors que les tables temporaires locales ne sont visibles que pour SQL Server actuel connexion.

10