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

Développement SQL Server Discussion :

Comment utiliser une table temporaire ?


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Comment utiliser une table temporaire ?
    Bonjour,

    je dois faire une requête en 2 fois (SQL SERVEUR 2000):
    résultat de ma requête 1 dans une table temporaire

    puis select dans cette table tempo pour obtenir mon résultat voulu

    qui lui même sera inséré dans une autre table.

    Je prends un exemple volontairement simple (qui me servira juste à comprendre):


    Requête 1 : select * From Clients --> table tempo
    requête 2 : insert into bd.RESULTAT ...(select * From TableTempo Where ville='PARIS')


    J'ai besoin de cette table tempo pour 2 raisons : je n'arrive pas à produire ma requête d'INSERT en 1 seule fois selon l'attente et 2,je voudrais apprendre à en utiliser. (ce qui pourrait m'aider dans d'autres requêtes)

    En cherchant sur le net, j'ai trouvé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    create table #sp_who ( 
    spid smallint, 
    ecid smallint, 
    status nchar(30),
    loginame nchar(128),
    hostname nchar(128),
    blk char(5), 
    dbname nchar(128),
    cmd nchar(16), 
    der nchar(10)) 
     
    insert into #sp_who execute sp_who 
     
    select * from #sp_who
    C'est pour une procédure stockée. Pouvez-vous m'aider pour l'utiliser dans une requête selon cas exposé ?

    Merci d'avance pour vos conseils.
    Thibault

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2003
    Messages : 87
    Points : 93
    Points
    93
    Par défaut
    Bonjour,
    D'après les conseils dispensés sur ce forum et sur le site, il est très couteux de créer des tables temporaires.
    Ne pourrais-tu pas créer une vue à la place ?

  3. #3
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Effectivement sous SQL Server 2000, vous n'avez pas d'autre choix pour récupérer le résultat de sp_who, sauf si vous requêtiez master.dbo.sysprocesses pour un spid > 50 et spid <> @@SPID ...

    Dans ce cas vous pouvez faire votre INSERT dans une table de votre choix.
    Mais pourquoi faites-vous cela ?

    @++

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par elsuket Voir le message
    ... vous requêtiez master.dbo.sysprocesses pour un spid > 50 et spid <> @@SPID ...
    Dans ce cas vous pouvez faire votre INSERT dans une table de votre choix.
    Mais pourquoi faites-vous cela ?@++
    Bonsoir, Merci à vous 2 pour vos réponses.

    Mon niveau en SQL et SQL Server est débutant : du coup, SPID>50 je ne comprends rien!!

    Je veux faire en 2 fois, car j'ai besoin d'un regroupement que je n'arrive pas à obtenir sur ma 1ère requête (à cause des infos à récupérer)
    Donc je veux faire une requête sur ce 1er résultat et lancer mon regroupement final.

    la première requête me donne Par client, pour 2 journaux, les écritures comptables

    dans la deuxième, je ne veux plus que Par client, le total des écritures de la requête 1

  5. #5
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Désolé, c'est "execute sp_who" qui m'a mis sur cette piste ...
    Pour votre info le SPID est le numéro d'un processus de SQL Server.
    Tous les numéros de processus supérieurs à 50 sont des processus utilisateurs, et la fonction @@SPID vous retourne le numéro de votre processus (le n° qui est en bas et à droite de chaque fenêtre de requête ).

    Pour votre requête, il vous suffit de faire un aggrégat (SUM dans votre cas), ce qui donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IDEcritureComptable, SUM(Montant)
    FROM maTable
    GROUP BY IDEcritureComptable
    Dans tous les cas je ne crois pas que pour faire ce que vous cherchez vous ayiez besoin d'une table temporaire

    Mais sans vos tables ni votre requête, difficile de vous aider ...

    @++

Discussions similaires

  1. [AC-2003] Comment utiliser une table access pour 2 fichiers différents ?
    Par bigounet dans le forum Access
    Réponses: 2
    Dernier message: 08/04/2012, 22h45
  2. Réponses: 12
    Dernier message: 09/05/2008, 08h32
  3. comment remplir une table en utilisant une boucle
    Par nice dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 07/02/2008, 10h52
  4. Réponses: 8
    Dernier message: 04/01/2008, 08h28
  5. Comment ne pas utiliser une #table
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/06/2007, 15h19

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