3 votes

Quelle est la méthode préférée pour créer, utiliser et supprimer des tables temporaires dans SQL Server ?

Lors de l'utilisation de tables temporaires dans les procédures stockées SQL Server, la pratique préférée est de :

1) Créer la table temporaire, la peupler, l'utiliser puis la supprimer

CREATE TABLE #MyTable ( ... )

-- Faire des choses

DROP TABLE #MyTable

2) Vérifier si elle existe, la supprimer si c'est le cas, puis la créer et l'utiliser

IF object_id('tempdb..#MyTable') IS NOT NULL
DROP TABLE #MyTable

CREATE TABLE #MyTable ( ... )

3) La créer et laisser SQL Server la nettoyer lorsqu'elle sort du scope

CREATE TABLE #MyTable ( ... )

-- Faire des choses

J'ai lu dans cette réponse et ses commentaires associés, que cela peut être utile dans des situations où la table temporaire est réutilisée et que SQL Server va la tronquer mais conserver la structure pour gagner du temps.

Ma procédure stockée est probablement appelée assez fréquemment, mais elle ne contient que quelques colonnes, donc je ne sais pas vraiment à quel point cela peut être avantageux dans ma situation.

2voto

Aaron Bertrand Points 116343

Vous pourriez tester et voir si une méthode surpasse une autre dans votre scénario. J'ai entendu parler de cet avantage de réutilisation mais je n'ai pas effectué de tests approfondis moi-même. (Mon instinct me dit de supprimer explicitement tout objet #temp que j'ai créé.)

Dans une seule procédure stockée, vous ne devriez jamais avoir à vérifier si la table existe - sauf s'il est également possible que la procédure soit appelée depuis une autre procédure qui aurait pu créer une table avec le même nom. C'est pourquoi il est recommandé de nommer les tables #temp de manière significative au lieu d'utiliser #t, #x, #y, etc.

1voto

Jitendra Gupta Points 696

Je suis cette approche:

SI object_id('tempdb..#MyTable') N'EST PAS NULL

SUPPRIMER TABLE #MyTable

  CREER TABLE #MyTable ( ... )

  // Faire quelque chose

SI object_id('tempdb..#MyTable') N'EST PAS NULL

SUPPRIMER TABLE #MyTable

Raison: Au cas où une erreur se produirait dans la procédure stockée, et que la table temporaire créée ne serait pas supprimée, lorsque la même procédure stockée est appelée avec une vérification d'existence, une erreur sera générée indiquant que la table ne peut pas être créée, et ne sera jamais exécutée avec succès à moins que la table ne soit supprimée. Donc, toujours vérifier l'existence d'un objet avant de le créer.

0voto

Durus Points 136

Lors de l'utilisation de tables temporaires, ma pratique préférée est en fait une combinaison de 1 et 2.

  IF object_id('tempdb..#MyTable') IS NOT NULL
     DROP TABLE #MyTable

  CREATE TABLE #MyTable ( ... )

  // Faire des trucs

  IF object_id('tempdb..#MyTable') IS NOT NULL
     DROP TABLE #MyTable

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X