Citation :
Tables temporaires
Vous pouvez créer des tables temporaires locales et globales. Les tables temporaires locales ne peuvent être vues que dans la session en cours ; les tables temporaires globales sont accessibles dans toutes les sessions.
Faites précéder les noms de tables temporaires locales d'un signe dièse (#table_name), et les tables temporaires globales de deux signes dièse (##table_name).
Les instructions SQL font référence à une table temporaire à l'aide de la valeur spécifiée pour table_namedans l'instruction CREATE TABLE :
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
Si vous créez une table temporaire locale dans une procédure stockée ou dans une application qui peut être exécutée en même temps par plusieurs utilisateurs, SQL Server doit être capable de distinguer les tables créées par les différents utilisateurs. Cela est géré par SQL Server en ajoutant de manière interne un suffixe numérique à chaque nom de table temporaire locale. Le nom complet d'une table temporaire, tel qu'il est stocké dans la table sysobjects de tempdb, est constitué du nom de table spécifié dans l'instruction CREATE TABLE plus le suffixe numérique généré par le système. Pour laisser assez de place au suffixe, le table_name spécifié pour un nom de table temporaire locale ne doit pas dépasser 116 caractères.
Les tables temporaires sont automatiquement supprimées lorsqu'elles deviennent hors de portée, sauf si elles sont supprimées explicitement à l'aide de DROP TABLE. 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 des procédures stockées imbriquées exécutées 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 ayant 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 supprimées automatiquement lorsque la session qui a créé la table se termine, et que toutes les autres tâches n'y font plus référence. L'association entre une tâche et une table n'est assurée que pendant la durée d'une seule instruction Transact-SQL. Cela signifie qu'une table temporaire globale est supprimée à la fin de la dernière instruction Transact-SQL qui faisait activement référence à la table lorsque la session de création s'est terminée. Une table temporaire locale créée au sein d'une procédure stockée ou d'un déclencheur est différente d'une table temporaire ayant le même nom créée avant l'appel de la procédure stockée ou du déclencheur. Si une requête fait référence à une table temporaire, et que deux tables temporaires existent à ce moment sous le même nom, la table à laquelle la requête fait référence n'est pas définie. Les procédures stockées imbriquées peuvent également créer des tables temporaires portant le même nom qu'une table temporaire créée par la procédure stockée qui l'a appelée. Toutes les références au nom de table dans la procédure stockée imbriquée sont résolues par rapport à la table créée dans la procédure imbriquée, par exemple :
CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO
Voici le jeu de résultats obtenu :
(1 row(s) affected)
Test1Col
----------- 1 (1 row(s) affected)
Test2Col
----------- 2 Lorsque vous créez des tables temporaires locales ou globales, la syntaxe CREATE TABLE prend en charge les définitions de contraintes à l'exception des contraintes FOREIGN KEY. Si vous spécifiez une contrainte FOREIGN KEY dans une table temporaire, l'instruction renvoie un message d'avertissement précisant que la contrainte a été ignorée et que la table est toujours créée mais sans les contraintes FOREIGN KEY. Les tables temporaires ne peuvent pas être référencées dans des contraintes FOREIGN KEY.
Considérons l'utilisation de variables de tables au lieu de tables temporaires. Les tables temporaires sont utiles lorsque des index doivent être créés explicitement sur ces tables ou lorsque les valeurs de tables doivent être visibles au travers de plusieurs procédures stockées ou fonctions. En général, ces variables de tables contribuent à un traitement plus efficace des requêtes. Pour plus d'informations, voir table.
|