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

WinDev Discussion :

Requête Dynamique SQL SERVER [WD17]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Requête Dynamique SQL SERVER
    Bonjour.

    Débutant en SQL dynamique, Je n'arrive pas à résoudre le problème généré par la requête suivante. Je suis sur SQL SERVER 2005 SP3, WINDEV 17 78n, accès natif client SQL SERVER.

    DEClARE
    @VAR1 INT,
    @VAR2 VARCHAR(1000),
    @VAR3 VARCHAR(1000),
    @VAR4 INT,
    @VAR5 VARCHAR(1000),
    @VAR6 VARCHAR(1000)

    INSERT INTO TmpOldDevis
    (IDOldDEVIS)
    Select Devis.IDDevis From Devis where Devis.IDPropositions = 36524

    INSERT INTO TmpNewDEVIS
    (IDNewDEVIS)
    Select Devis.IDDevis From Devis where Devis.IDPropositions = 37899


    SET @VAR1 = 1
    BEGIN TRAN
    WHILE @VAR1 <= (Select Count(*) From TmpOldDevis)
    BEGIN
    SET @VAR2 ='SELECT (IDOldDEVIS) FROM TmpOldDevis WHERE Temp_IDOldDEVIS ='+CAST(@VAR1 as VARCHAR(3))
    EXECUTE(@VAR2);
    SET @VAR3= 'INSERT INTO TmpLignesMateriels(IDLignesMateriels,IDDevis,IDProduits,Designation,Quantité,PrixNetHT,TotalHT,PrixAchatHT,NumeroLigne,IDTVA,
    RemiseAnnuelle,RemiseComplementaire,PrixNetHT_RA,TotalHT_RA)
    SELECT IDLignesMateriels,IDDevis,IDProduits,Designation,Quantité,PrixNetHT,TotalHT,PrixAchatHT,NumeroLigne,IDTVA,
    RemiseAnnuelle,RemiseComplementaire,PrixNetHT_RA,TotalHT_RA FROM LignesMateriels Inner Join
    TmpOldDevis On LignesMateriels.IDDevis = TmpOldDevis.IDOldDEVIS WHERE LignesMateriels.IDDevis = TmpOldDevis.IDOldDEVIS and TmpOldDevis.Temp_IDOldDEVIS='+CAST(@VAR1 as VARCHAR(3)) /*+CAST(159021 as VARCHAR(6))159021' +CAST(159021 as VARCHAR(6))+*//*TmpOldDevis.IDOldDEVIS and TmpOldDevis.Temp_IDOldDEVIS='+CAST(@VAR1 as VARCHAR(3)) */
    print @var3
    EXECUTE(@VAR3);
    SET @VAR5 ='(SELECT (IDNewDEVIS) FROM TmpNewDEVIS WHERE Temp_IDNewDEVIS = '+CAST(@VAR1 as VARCHAR(3))+')'
    EXECUTE(@VAR5);

    SET @VAR6 ='INSERT INTO LignesMateriels(IDDevis,IDProduits,Designation,Quantité,PrixNetHT,TotalHT,PrixAchatHT,NumeroLigne,IDTVA,
    RemiseAnnuelle,RemiseComplementaire,PrixNetHT_RA,TotalHT_RA)
    SELECT '+@VAR5+',IDProduits,Designation,Quantité,PrixNetHT,TotalHT,PrixAchatHT,NumeroLigne,IDTVA,RemiseAnnuelle,RemiseComplementaire,PrixNetHT_RA,TotalHT_RA
    FROM TmpLignesMateriels Inner Join TmpOldDevis On TmpLignesMateriels.IDDevis = TmpOldDevis.IDOldDEVIS WHERE TmpOldDevis.IDOldDEVIS = TmpOldDevis.IDOldDEVIS and TmpOldDevis.Temp_IDOldDEVIS='+CAST(@VAR1 as VARCHAR(3))


    EXECUTE(@VAR6);
    SET @var1 = @var1+1
    END
    COMMIT TRAN


    J'ai systématiquement le message suivant "Le nom de la variable @P1 a déjà déclaré. les noms des variables doivent être unique dans un lot de requêtes ou une procédure stockée".
    SQL State 42000
    SQL ERROR 134.

    Par avance, merci de votre aide.
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    pourquoi ne pas faire une procédure stockée avec tout ça, en attente de paramètres qui vont bien et lancée par Windev ?

    Sinon, lances-tu plusieurs fois ce traitement avec la même connexion ? Car là tu aurais en effet un problème de déclaration de variable redondante ...

    à bientôt,

    Nicolas

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour.

    Merci de votre réponse.
    Je suis arrivé aux mêmes conclusions que les votres. Mais j'ai trouvé une solution de contournement qui consiste à empêcher WINDEV d'interpréter la requête en ajoutant les paramètres suivants dans celle-ci : hRequêteSansCorrection + hSansBind

    SI HExécuteRequêteSQL(sdRequete_DupliLignesMatériels,*********,hRequêteSansCorrection + hSansBind,sRequete_DupliLignesMatériels)

    Comme trouvé sur le site de PC SOFT :
    http://doc.pcsoft.fr/fr-FR/?3044084&...xecutesqlquery.

    Merci de votre aide.

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

Discussions similaires

  1. Lenteur requêtes ODBC SQL-server 2005 sous Vista
    Par Macc dans le forum Windows Vista
    Réponses: 3
    Dernier message: 04/08/2011, 14h57
  2. Performance d'une requête sous SQL Server 2005
    Par Menoto dans le forum Développement
    Réponses: 4
    Dernier message: 20/03/2008, 09h58
  3. Performance d'une requête sous SQL Server 2005
    Par Menoto dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/03/2008, 09h58
  4. Outil pour requêter MS SQL Server
    Par Qamalito dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/02/2008, 21h48
  5. Exécuter requête sur SQL Server 2000
    Par zoubli dans le forum VBScript
    Réponses: 4
    Dernier message: 01/03/2007, 08h59

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