none
Jointure entre une table et le résultat d'un procédure stockée RRS feed

  • Question

  • Bonjour,
    Sous Sql Server 2005 j'aimerais effectuer une jointure entre une Table et le résultat d'une procédure stockée .
    Est il possible de réaliser ce type de jointures et si oui quel en est la syntaxe.

    Merci d'avance
    lundi 20 juillet 2009 11:06

Réponses

  • bon je viens de faire un test simple mais ca ne peut pas fonctionner car les tables temporaires sont détruites en fin de session donc en l'occurence à la fin de l'execution de ma procédure stockée ... Je ne peux donc faire l'execution de la procédure (qui créer la table Temporaire) puis la jointure sur la table Temporaire...

    • Marqué comme réponse EP01 mardi 28 juillet 2009 12:12
    mercredi 22 juillet 2009 11:40

Toutes les réponses

  • Bonsoir,

    en utilisant openquery, il est possible de joindre le résultat d'une procédure stockée avec une autre requête

    SELECT 
       c.Id, 
       c.fullName 
    FROM
       Client c
    JOIN openquery([server_name], '{call mydbname..sp_getAllClients}') c2 
       on c.Id = c2.Id 
    go 
    

    Fab'
    • Proposé comme réponse Fabrice Michellonet mardi 21 juillet 2009 20:55
    • Non proposé comme réponse EP01 mercredi 22 juillet 2009 06:47
    mardi 21 juillet 2009 20:55
  • Bonjour,

    après avoir executé la commande :

    EXEC sp_serveroption 'SVNT8', 'Data Access', 'true'

    j'ai tenté la chose suivante :
    SELECT T.NumAnl,J.CPR FROM Analyses_Cplt as T
    JOIN openquery([MonNomDeServeur], '{exec Payan.dbo.ExecuteToClient ''Receptions'',False }') as J on T.Numrecep = J.NumRecep

    La procédure stockée ExecuteToClient est une procédure ecrite en CLR avec VS2008 et elle Accepte 2 paramètres ( Receptions et False ) ici écrit entre (des ' doublés).

    Il semblerait y avoir un problème mais je ne sais pas où voilà ce que me retourne l'exécution de la requête :

    Le fournisseur OLE DB "SQLNCLI" du serveur lié "SVNT8" a retourné le message "Erreur de syntaxe, violation d'autorisation ou autre erreur non spécifique".

    Msg7321, Niveau16, état2, Ligne2

    Une erreur s'est produite lors de la préparation de l'exécution de la requête "{exec Payan.dbo.ExecuteToClient 'Receptions',False }" sur le fournisseur OLE DB "SQLNCLI" du serveur lié .

    Je vais tester avec autre chose en attendant ...

    Merci d'avance.



    Je viens de faire d'autres tests un peu plus poussé apparement la requête openquery fonctionne sur un procédure stockée simple écrite en TSQL, en ce qui concerne les procédures stockées écrites en VS2008 SQL CLR il n'en va pas de même...
    J'ai pris l'exemple livré avec les SAMPLES SendDataSet (C:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\SendDataSet) je l'ai compilée et déployée sur le serveur SQL lorsque je l'execute par la commande : Exec usp_TestSendDataSet ca fonctionne par contre avec toutes les formes de syntaxe openquery rien à faire .

    merci d'avance...
    • Modifié EP01 mercredi 22 juillet 2009 08:29
    mercredi 22 juillet 2009 06:46
  • Oui ca ne m'étonne finalement pas plus que ca.

    Sinon une solution de contournement serait de stocker le résultat de votre procédure stockée dans une table temporaire prévue a cet effet, puis d'operer la jointure avec cette meme table temporaire.

    Est-ce possible dans votre cas?
    Fab'
    mercredi 22 juillet 2009 08:51
  • Le problème du stockage dans une table temporaire est que le résulat (les colonnes) n'est pas le même d'un appel à l'autre.
    Cette procédure Stockée nous sert à retourner le resultat de l'union de plusieurs tables archives stockées dans une autre base.

    La table temporaire si mes souvenirs sont corrects est détruite à la fin de la session utilisateur sur le serveur (et/ou après un sqlconnection.close) ?

    Je vais regarder ce que cela donne mais je pense que ça va compliquer un tout petit peu ma procédure stockée...

    mercredi 22 juillet 2009 11:03
  • bon je viens de faire un test simple mais ca ne peut pas fonctionner car les tables temporaires sont détruites en fin de session donc en l'occurence à la fin de l'execution de ma procédure stockée ... Je ne peux donc faire l'execution de la procédure (qui créer la table Temporaire) puis la jointure sur la table Temporaire...

    • Marqué comme réponse EP01 mardi 28 juillet 2009 12:12
    mercredi 22 juillet 2009 11:40
  • Bonjour,

    Vous devriez pouvoir vous en sortir avec les tables temporaires. Il faut simplement créer votre table temporaire hors de la procédure et non pas dans la procédure comme ceci :

    CREATE TABLE #temp
    (
     id INT NOT NULL,
     [texte] VARCHAR(50) NOT NULL
    )
    
    -- Récupération résultat proc dans la table temporaire
    INSERT INTO #temp
    EXEC dbo.procedure_stockee
    
    -- jointure avec la 1ère table et table temporaire
    SELECT *
    FROM dbo.table1 t1
    INNER JOIN #temp tp
    ON ....
    
    DROP TABLE #temp

    ++


    MCDBA | MCITP SQL Server 2005 | LPI 1
    mercredi 29 juillet 2009 15:08
    Modérateur