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 :

Appel de Procédure stockée en ASP


Sujet :

MS SQL Server

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Appel de Procédure stockée en ASP
    Bonjour à tous.

    Je suis sous MSDE avec SQLExec.

    J'ai la proc. stock. suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE PROCEDURE maproc
    AS
    BEGIN
    	SELECT * into #mytempdb
    	FROM Table1 AS A, Table2 AS B, Table3 AS C, Table4 as D
    	WHERE A.Indice>0.05
    	and A.Num_val1 > A.Num_Val2
    	and C.NbOcc>1
    	and A.Num_Val1=B.Num_val
    	and A.Num_val2=C.Num_Val
    	and A.Num_Val1=D.Num_Val1
    	and A.Num_Val2=D.Num_Val2
     
    	Select top 500 * from #mytempdb order by NbOcc1 DESC,Indice DESC
    END
    Quand je l'execute cette proc avec SQLExec, ça marche, mais quant je l'appelle en ASP, il n'ouvre pas le RecordSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set RS=Connexion.execute("exec maproc")
    If not(RS.EOF and RS.BOF) then
    	response.write "Ca marche"
    else
    	response.write "Ca marche PAS"
    end if
    Le message d'erreur ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ADODB.Recordset error '800a0e78' 
    Cette opération n'est pas autorisée si l'objet est fermé. 
     
    test.asp, line 43
    La ligne 43 c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not(RS.EOF and RS.BOF) then
    Où est le pb ?

    Merci

    James

  2. #2
    Membre chevronné Avatar de denisys
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 137
    Points : 1 982
    Points
    1 982
    Par défaut
    Tu peut afficher le code complet de ta Page ASP ??????

  3. #3
    Candidat au Club
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je sais pas si ca peut venir de là ou pas mais, t'es sur de ta condition????not(RS.EOF and RS.BOF) ????????


    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Oui oui
    Oui, c'est ce que j'utilise pour vérifier qu'il y a bien un résultat à ma requête avant d'appeler ce résultat avec des RS(0) qui entrainent des erreurs si le RS est vide.

    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Je ne peux pas afficher tout mon code, mais je peux dire que lorsque je modifie ma ps comme ça :
    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 PROCEDURE maproc 
    AS 
    BEGIN 
       SELECT TOP 500 * into #mytempdb 
       FROM Table1 AS A, Table2 AS B, Table3 AS C, Table4 as D 
       WHERE A.Indice>0.05 
       and A.Num_val1 > A.Num_Val2 
       and C.NbOcc>1 
       and A.Num_Val1=B.Num_val 
       and A.Num_val2=C.Num_Val 
       and A.Num_Val1=D.Num_Val1 
       and A.Num_Val2=D.Num_Val2 
       order by NbOcc1 DESC,Indice DESC 
    END
    Ca marche. Le reste de la page ne semble donc pas en cause.

    Il semblerait qu'il y ait un pb lorsque j'enchaine les deux requêtes. Faut-il fetcher ma table #mytempdb ?

    Merci

    James

  6. #6
    Membre averti
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Points : 398
    Points
    398
    Par défaut
    Slt,

    Il faut que tu rajoutes un SET NOCOUNT ON dans ta procedure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE PROCEDURE maproc 
    AS 
    BEGIN 
     
       SET NOCOUNT ON
     
       SELECT * into #mytempdb 
       FROM Table1 AS A, Table2 AS B, Table3 AS C, Table4 as D 
       WHERE A.Indice>0.05 
       and A.Num_val1 > A.Num_Val2 
       and C.NbOcc>1 
       and A.Num_Val1=B.Num_val 
       and A.Num_val2=C.Num_Val 
       and A.Num_Val1=D.Num_Val1 
       and A.Num_Val2=D.Num_Val2 
     
       Select top 500 * from #mytempdb order by NbOcc1 DESC,Indice DESC 
    END
    a+

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Je ne voit vraiment pas l'intérêt d'une SP dans ce cas :
    1) tu ne passe aucun paramètre
    2) il n'y a qu'une seule requêteet donc pas de transaction à faire !
    3) fait tes jointures dans la ckause FROM et pas dans le WHERE !
    4) pour lancer une procédure qui renvoi un jeu de résultat il faut l'ouvrir avec une métode OPEN et non l'exécuter avec une méthode EXEC. L'algo est : OPEN, boucle de lecture(FETCH), CLOSE

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT TOP 500 * 
     
    INTO   #mytempdb
     
    FROM   Table1 AS A
           INNER JOIN Table2 AS B
                 ON A.Num_Val1 = B.Num_val
           INNER JOIN Table3 AS C
                 ON A.Num_val2 = C.Num_Val
           INNER JOIN Table4 as D
                 ON A.Num_Val1=D.Num_Val1
                    AND A.Num_Val2=D.Num_Val2
     
    WHERE  A.Indice>0.05
      and  A.Num_val1 > A.Num_Val2
      and  C.NbOcc>1
    A +

  8. #8
    Membre chevronné Avatar de denisys
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 137
    Points : 1 982
    Points
    1 982
    Par défaut
    Affiche la partie déclaration
    Ainsi que la partie ouverture de connexion .

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut SET NOCOUNT ON
    Merci Gandalf, le SET NOCOUNT ON a résolu mon pb.

    J'utilise une proc car je souhaite manipuler seulement les premiers enregistrements (le top 800 sur plus de 20000 enregistrements), et je ne vois donc pas comment faire autrement.

    Par ailleurs, les inner join on s'y fait bien, mais cela ne semble pas changer grand chose aux perfs ... Ni à l'analyse de la requête...

    Merci à tous,

    James

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

Discussions similaires

  1. appel d'une procédure stocké en asp.net
    Par malcom x dans le forum Accès aux données
    Réponses: 17
    Dernier message: 24/04/2008, 17h23
  2. Réponses: 1
    Dernier message: 07/02/2006, 00h11
  3. Réponses: 3
    Dernier message: 17/01/2006, 17h12
  4. Update appelant une procédure stockées
    Par meufeu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/10/2005, 18h31
  5. [appeler une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/03/2005, 22h38

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