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 :

table temporaire en mémoire


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut table temporaire en mémoire
    Bonjour,

    dans une procédure stockée, j'utilise une fonction qui me renvoie une table.

    Je dois ensuite parcourir la table ligne par ligne dans un while pour faire plusieurs traitements.
    Mon problème c'est qu'actuellement je recupère le résultat de la fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * INTO tablePays FROM dbo.fn_Split(@tPays, '||');
    ce qui crée une table dans la base, donc je dois faire un drop à la fin de la procédure stockée.

    J'avais penser à parcourir directement le resultat de la fonction dans le while, mais je craignais que l'appel à la fonction s'effectue à chaque fois (?)

    -si ce n'est pas le cas, je laisse tomber mon select into
    -sinon, est-ce possible de créer une table temporaire qui soit juste créée en mémoire? (quitte à faire une libération de la mémoire à la fin du traitement je sais pas comment)

    Merci

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    pour creer un table temporaire sans etre obligé de l'effacer à la fin de la prod il faut juste que tu rajoute un '#' devant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * INTO #tablePays FROM dbo.fn_Split(@tPays, '||');
    l'avantage aussi, c'est que si tu n'avais pas mis de '#', si deux utilisateurs execute la prod en meme temps un des deux utilisateurs aurait eu un message disant 'tablePays already exist in the database'.

  3. #3
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Super!

    Alors avec le '#', plus de problème d'accès concurrents, plus de create et de drop de table... ca me parait parfait.
    Je suppose que la mémoire allouée aux tables est libérée à la sortie de la procédure?

    Merci beaucoup

  4. #4
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    tu peux l'utiliser comme ca aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE TABLE #TOTO
    (....

  5. #5
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Malheureusement, ca ne marche pas...

    A l'execution, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 208, Level 16, State 1, Procedure Cahier_ist_dossier, Line 83
    Nom d'objet 'tablePays' non valide.
    sur la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT @valeurPays = [value] FROM #tablePays WHERE idx = @i

  6. #6
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Autant pour moi, c'était juste un oublie d'un #


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

Discussions similaires

  1. Table temporaire
    Par Tapioca dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/07/2004, 11h32
  2. Table temporaire et résultat requête
    Par Royd938 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/07/2004, 14h24
  3. Suppression table temporaire...
    Par Royd938 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2004, 12h00
  4. [procédure stockée] table temporaire commençant par #???
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/04/2004, 12h23
  5. Nettoyage de table temporaire
    Par Alain Dionne dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/02/2004, 20h44

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