1 pièce(s) jointe(s)
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.