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

MS SQL Server Discussion :

SP - tables temporaires - accès concurrents


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut SP - tables temporaires - accès concurrents
    Bonjour,

    J'ai une procédure stockée à laquelle je passe un VARCHAR(MAX) contenant une liste d'Id séparés par des virgules. Pour les traiter, je créé une table temporaire au sein de ma SP qui contient une seule colonne. Je remplis ensuite ma table en parcourant mon VARCHAR(MAX). Je peux ensuite aisément utiliser ma table temporaire avec des INNER JOIN.

    Cette méthode fonctionne bien, seulement je me pose la question de son comportement si il y a des accès concurrents à ma procédure stockée. Est-ce que la table temporaire d'une SP sera visible depuis une autre SP?

    Merci d'avance de vos réponses !

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    non, si elle est préfixée par un simple #, elle est locale à la session.

  3. #3
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Parfait merci ! Je préfixait effectivement le nom de ma table avec # mais sans en savoir l'effet. Je pensais que c'était une simple question de convention syntaxique.

    Merci bcp !

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonsoir,

    Les # tables vous demanderont de la ressource sur TempDB, ce qui n'est jamais très bon : en effet ces tables sont stockées dans TempDB.
    Pourquoi ne pas utiliser une expression de table commune pour découper votre chaîne et faire votre jointure dans la même commande ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @str VARCHAR(64)
    SET @str = 'toto,titi,tutu,tata,gringo,elsuket';
     
    WITH CTE (Deb, Fin) AS
    (
      SELECT 1 Deb, CHARINDEX(',', @str + ',') Fin
     UNION ALL
      SELECT Fin + 1, CHARINDEX(',', @str + ',', Fin + 1)
      FROM CTE
      WHERE CHARINDEX( ',', @str + ',', Fin + 1 ) > 0
    )
    SELECT SUBSTRING(@str, Deb , Fin - Deb), Deb, Fin
    FROM CTE
    après la clause FROM précédente, vous pouvez tout à fait écrire une jointure

  5. #5
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Bonjour,

    Je ne comprends pas bien le code SQL d'exemple et le principe. Est-ce qu'il consiste à utiliser une table permanente commune ou c'est un système autre qu'une table standard SQL?

    Merci de ces précisions !

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    L'expression de table ne peut être utilisée que dans l'instruction qui la suit. Elle est utile pour faire une requête récursive.
    http://sqlpro.developpez.com/cours/s...te-recursives/

    Souvent, elle entraîne la création d'un fichier temporaire... qui sera lui aussi stocké dans tempdb.

    Utilise en effet les tables temporaires avec parcimonie, si tu peux les éviter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Accès concurrents et tables liées
    Par Tchebichef dans le forum Sécurité
    Réponses: 7
    Dernier message: 20/09/2012, 08h41
  2. accès concurrents entre 2 services distincts sur une même table
    Par grinder59 dans le forum Développement
    Réponses: 3
    Dernier message: 26/08/2011, 12h57
  3. Accès à une table temporaire dans du code C#
    Par justinedr71 dans le forum Développement
    Réponses: 8
    Dernier message: 19/07/2010, 17h27
  4. Gestion des accès concurrents à une table
    Par kodo dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 20/06/2006, 14h05
  5. accés concurrent à une table
    Par shout dans le forum Oracle
    Réponses: 5
    Dernier message: 06/10/2005, 10h54

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