IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Utilisation table temporaire locale dans une PS pour une application


Sujet :

Administration SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2023
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Utilisation table temporaire locale dans une PS pour une application
    Bonjour,

    J'ai remplacé une table variable par une table temporaire locale dans une procédure stockée car beaucoup de données à traiter. En effet, j'ai divisé mon temps par 2. Mais je pose la question suivante, cette PS est utilisée par une application donc elle est appelée plusieurs fois en même temps. La table temporaire locale qui porte le même nom dans la PAS est disponible uniquement dans la session et elle est supprimée normalement à la fin. Si je mets explicitement drop table #.. dans la PS pour être sure qu'elle ne sera pas utilisé dans le futur, cela plante. J'ai fait des tests en bouclant mille fois sur deux sessions connections pour tester sans stipuler le drop et là cela marche. Quel est le risque dans mon choix?

    Je sais qu'il existe des tables temporaires locale en mémoire, mais je ne maitrise pas toute la syntaxe.

    Cordialement

    Sylvie De Magalhaes

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 938
    Points : 51 773
    Points
    51 773
    Billets dans le blog
    6
    Par défaut
    Les tables temporaire dont le nom commence par le caractère dièse (#) et non double dièse (##) sont des tables temporaires locales. Celle commençant par un double dièse (##) sont des tables temporaire globales.

    Dans les deux cas, la table temporaire locale ou globale est supprimée :
    • lorsque le code de la routine qui la comporte est terminé (RETURN)
    • lorsque la session de l'utilisateur prends fin


    En revanche, :
    • la table temporaire globale est vue par tous les sessions de tous utilisateurs de l'instance
    • la table temporaire locale n'est vue que par la session de l'utilisateur qui l'a créé, même si cette table porte le même nom...


    Comment ça marche ?
    Le nombre maximal de sessions d'utilisateurs possible dans SQL Server est limité à 32765. Chaque session est identifié par un discriminant interne. Ce que vous ne voyez pas c'est que lorsque vous créez une table temporaire globale, le moteur rajoute à la fin du nom de la table le discriminant de session.

    Vous pouvez vous en assurer en faisant le script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE #AbraCadaBra (C INT);
     
    SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES;
    La seconde requête montre la liste des tables de la base tempdb dans laquelle sont créés tous les objets temporaires...
    Vous y trouverez le nom de la table temporaire créée précédemment avec une logue série de blanc souligné au le discriminant de session qui y figure dans les 12 derniers caractères... Par exemple comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TABLE_CATALOG      TABLE_SCHEMA    TABLE_NAME                                                                                                                       TABLE_TYPE
    ------------------ --------------- -------------------------------------------------------------------------------------------------------------------------------- ----------
    tempdb             dbo             #AbraCadaBra________________________________________________________________________________________________________000000000005 BASE TABLE
    tempdb             dbo             #B312FE6C                                                                                                                        BASE TABLE
    tempdb             dbo             #AC6600DD                                                                                                                        BASE TABLE
    tempdb             dbo             #AD5A2516                                                                                                                        BASE TABLE
    ...
    Notez au passage de nombreuses entrées dans cette vue dont le nom commence par un # suivi de 8 caractères (qui sont en fait un code hexadécimal)... Ce sont les variables tables dont la plupart sont utiluisées en interne par le moteur SQL pour ses propres besoins (diagnostics en général).

    CONCLUSION : il n'y a aucun problème de concurrence puisque les tables temporaires locales sont toutes différentes et il n'est pas nécessaire de les supprimées car SQL Server le fait tout seul et bien !

    ATTENTION : les tables temporaires ne sont pas des tables en mémoire contrairement à une légende, pas plus que les variables tables ne sont des tables en mémoire... Ce sont réellement des tables instanciées comme les autres, mais avec un environnement plus léger et un comportement différent.

    A +

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/07/2021, 11h04
  2. Réponses: 0
    Dernier message: 16/05/2018, 13h48
  3. Réponses: 17
    Dernier message: 12/06/2017, 12h33
  4. Réponses: 0
    Dernier message: 17/06/2010, 15h22
  5. Utilisation des fichiers CSS dans une application Struts
    Par menzlitsh dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/09/2006, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo