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 :

Exploitation résultat d'une Procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Exploitation résultat d'une Procédure stockée
    Bonjour,

    pour récupérer et pouvoir sélectionner une ou plusieurs colonnes de la procédure stockée, je crée une table temporaire:

    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



    ceci est rendu possible car je connais par avance les colonnes à créer.

    Comment serait-il possible de faire la même chose si je ne connais pas par avance les colonnes qui composent la table?

    merci!

  2. #2
    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,

    Je ne crois pas que cela soit possible.

    D'autre part, pour reprendre l'exemple de sp_who, il vous faut regarder les tables accédées par cette procédure stockée.
    Si vous êtes sous SQL Server 2005, regardez les vues sys.dm_exec_sessions, sys.dm_exec_connections, sys.dm_exec_requests, et pourquoi pas sys.sysprocesses ...
    Cela vous permet de sélectionner seulement les colonnes dont vous avez besoin.

    @++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    je suis de nature obstinée et je suis convaincu qu'il doit y avoir un moyen!!!!


    j'ai touvé cela:

    SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC sp_who') WHERE status = 'runnable'


    mais quand je met le nom de mon serveur "PC_XAV\SQLEXPRESS", il me met un message d'erreur sur le "\"

    alors je met "SQLEXPRESS" et là il me dit qu'il ne le trouve pas dans sys.servers

    je fait un SELECT * from sys.servers et c'est bien "PC_XAV\SQLEXPRESS" qui est référencé comme seul et unique serveur.

    concraitement, je crois que si j'arrive à passer cette requête, le tour est joué.

    pkoi elle ne fonctionne pas???

  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 : 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
    La fonction OPENQUERY nécessite un serveur lié, or ce n'est pas votre cas.
    Que cherchez-vous à faire exactement ?

    @++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    J'ai fait un client SQL qui supporte les instruction T-SQL

    Ce que je veux pouvoir faire, c'est lui demander une, deux ou n colonne(s) d'une table renvoyée par une procédure sotckée. je ne veux pas avoir à connaitre forcément l'ensemble de la définition de la table.

    par exemple, je sais que la fonction sp_who renvoi les colonnes 'status' et 'loginame', je veux donc interroger sp_who que pour la récupération de ces deux colonnes.

    vous me direz que je peux toujours exécuter ma requête, envoyer le résultat dans un dataset et interroger ce dataset dans un deuxième temps, mais je préférerais pouvoir filtrer en amont.

    N.B: on est sur de la branlette neuronale pure, mais bon, cela fait dix ans que je programme en VB et j'ai déjà passer des dizaines d'heures sur des problème et jusqu'à présent j'ai toujours trouvé les solutions. Je débute en sql et sql serveur, franchement, c'est quand même bien balaise!

  6. #6
    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,

    c'est lui demander une, deux ou n colonne(s) d'une table renvoyée par une procédure sotckée
    C'est là que vous faites une confusion.
    Un procédure stockée retourne un ensemble de résultat, qui peut provenir d'une ou plusieurs tables ou vues.
    Il n'y a aucun moyen de connaître par avance la structure de l'ensemble de données retourné par une procédure stockée, parce que la même procédure stockée peut ne rien retourner, retourner une valeur, ou un ensemble de valeurs.
    J'ai essayé plusieurs fois de faire ce que vous cherchez, et j'en suis arrivé à la conclusion que je viens de vous donner.

    En plus sp_who est une procédure stockée système, donc rien ne garantit qu'elle sera présente dans les prochaines versions de SQL Server, ce qui rendrait votre applicatif incompatible, avouez que ce serait dommage.

    La seule façon de faire ce que vous cherchez est de le faire comme vous l'avez présenté, mais ce n'est clairement pas performant

    N.B: on est sur de la branlette neuronale pure
    OK, mais c'est intéressant de chercher

    Je débute en sql et sql serveur, franchement, c'est quand même bien balaise!
    Pour ma part ça fait quatre ans que je bosse sur SQL Server, et je le trouve bien balaise aussi, je m'en étonne presque tous les jours

    @++

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    bonsoir,

    Juste pour information,

    Bien que ce ne soit pas très propre , je le précise tout de fois , il est quand même possible de faire ce genre de manipulation via un openrowset par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * INTO #sp_who FROM OPENROWSET('SQLOLEDB','Data Source=server;Trusted_connection=Yes;Integrated Security=SSPI','EXEC sp_who')
    Mais la méthode décrite par elsuket est quand même bien meilleure

    ++

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Merci, je vais dire que la réponse attendue et là!

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

Discussions similaires

  1. SELECT sur le résultat d'une procédure stockée
    Par sorcer1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/09/2007, 13h28
  2. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 22h08
  3. Problème de récup de résultats d'une procédure stockée
    Par an_merle dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 12/01/2006, 10h08
  4. [SQL Server]Recupération du résultat d'une procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 8
    Dernier message: 04/04/2005, 20h53
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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