Question

Dans une procédure stockée, quand #Temptable est-il créé dans SQL Server 2005 ?Lors de la création du plan d’exécution de la requête ou lors de l’exécution de la procédure stockée ?

if (@x = 1)
    begin
        select 1 as Text into #Temptable
    end
else
    begin
        select 2 as Text into #Temptable
    end
Était-ce utile?

La solution

Question interessante.

Pour le type de table temporaire que vous créez, je pense que c'est lorsque la procédure stockée est exécutée.Les tables créées avec le préfixe # sont accessibles à la session SQL Server dans laquelle elles sont créées.Une fois la session terminée, ils sont supprimés.

Cette URL : http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx semble indiquer que les tables temporaires ne sont pas créées lors de la création des plans d'exécution de requêtes.

Autres conseils

Il est créé lors de son exécution et supprimé à la fin de la session.

Bien qu'elle puisse être automatiquement supprimée à la fin d'une session, il est conseillé de supprimer la table vous-même lorsque vous en avez terminé.

Vous pouvez également envisager des variables de table, dont le cycle de vie est entièrement géré pour vous.

DECLARE @MyTable TABLE (MyPK INT IDENTITY, MyName VARCHAR(100))
INSERT INTO @MyTable ( MyName ) VALUES ( 'Icarus' )
INSERT INTO @MyTable ( MyName ) VALUES ( 'Daedalus' )
SELECT * FROM @MyTable

J'utilise presque toujours cette approche, mais elle présente des inconvénients.Plus particulièrement, vous ne pouvez utiliser que des index que vous pouvez déclarer dans la construction TABLE(), ce qui signifie essentiellement que vous êtes limité à la clé primaire uniquement – ​​sans utiliser ALTER TABLE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top