Problème sous SQL
Fermé
BOB2015
Messages postés
6
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 juillet 2013
-
26 déc. 2012 à 10:00
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 - 28 déc. 2012 à 16:11
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 - 28 déc. 2012 à 16:11
A voir également:
- Problème sous SQL
- Récupération serveur sql - Télécharger - Gestion de données
- Sql query - Télécharger - Gestion de données
- Sql replace plusieurs valeurs - Forum Programmation
- Delete cascade sql - Forum Programmation
- Sql date - 1 mois - Forum Programmation
4 réponses
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
Modifié par Morgothal le 26/12/2012 à 14:24
Modifié par Morgothal le 26/12/2012 à 14:24
Bonjour !
Voilà j'ai trouvé :) ça fait depuis ce matin 11h que je cherche, j'ai pas été très rapide...
Voilà la requête à exécuter jusqu'à ce qu'il y ait affiché "Commande réussie" à la place de "1 ligne(s) affectée(s)" :
(La table CSD_TEMP1 correspond à ta table source)
Désolé pour la casse un peu pourrie et l'indentation à jeter à la poubelle :/
Je suis a dispo si besoin !
-------------------
Cordialement,
Clément
Voilà j'ai trouvé :) ça fait depuis ce matin 11h que je cherche, j'ai pas été très rapide...
Voilà la requête à exécuter jusqu'à ce qu'il y ait affiché "Commande réussie" à la place de "1 ligne(s) affectée(s)" :
(La table CSD_TEMP1 correspond à ta table source)
declare @id int declare @code_r nvarchar (50) declare @lib nvarchar (50) declare @code nvarchar (50) declare @formula nvarchar (50) declare @iteration int DECLARE db_cursor CURSOR FOR SELECT id FROM csd_temp1 OPEN db_cursor FETCH NEXT FROM db_cursor INTO @id WHILE @@FETCH_STATUS = 0 BEGIN set @code_r = (select code_r from CSD_TEMP1 where ID = @id) set @lib = (select lib from CSD_TEMP1 where ID = @id) set @code = (select codes_asso from CSD_TEMP1 where ID = @id) set @formula = (select formula from CSD_TEMP1 where ID = @id) set @iteration = (select MAX(id) from CSD_TEMP1) if len(@code)>3 begin insert into CSD_TEMP1 values (@iteration+1,@code_r,@lib,left(@code,3),@formula) set @code = RIGHT(@code,len(@code)-4) update csd_temp1 set CODES_ASSO = @code where ID = @id end FETCH NEXT FROM db_cursor INTO @id END CLOSE db_cursor DEALLOCATE db_cursor
Désolé pour la casse un peu pourrie et l'indentation à jeter à la poubelle :/
Je suis a dispo si besoin !
-------------------
Cordialement,
Clément
BOB2015
Messages postés
6
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 juillet 2013
26 déc. 2012 à 15:33
26 déc. 2012 à 15:33
Bonjour Clément merci bp cela marche parfaitement, mais vous savez je découvre un peu le SQL et j'aurais besoin d'exécuter en une seule fois la commande, est-ce que vous savez ce que je pourrais faire pour l'exécuter en une seule fois ?
Merci d'avance,
Bob Peterson
Merci d'avance,
Bob Peterson
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
26 déc. 2012 à 16:22
26 déc. 2012 à 16:22
Rebonjour,
Voilà le code qui n'a besoin d'être exécuté qu'une seule fois.
Note : J'ai rajouté une colonne ID incrémentée pour pouvoir identifier les lignes. Cette colonne ID peut être rajoutée au début du traitement et être supprimée à la fin, je ne sais pas s'il y a besoin de le faire vu que le code posté ici a fonctionné ?
Voilà le code qui n'a besoin d'être exécuté qu'une seule fois.
Note : J'ai rajouté une colonne ID incrémentée pour pouvoir identifier les lignes. Cette colonne ID peut être rajoutée au début du traitement et être supprimée à la fin, je ne sais pas s'il y a besoin de le faire vu que le code posté ici a fonctionné ?
declare @id int declare @code_r nvarchar (50) declare @lib nvarchar (50) declare @code nvarchar (50) declare @formula nvarchar (50) declare @iteration int declare @compteur int declare @nblignes int set @nblignes = (select MAX(id) from CSD_TEMP1) set @compteur = 1 WHILE @compteur<=@nblignes BEGIN DECLARE db_cursor CURSOR FOR SELECT id FROM csd_temp1 OPEN db_cursor FETCH NEXT FROM db_cursor INTO @id WHILE @@FETCH_STATUS = 0 BEGIN set @code_r = (select code_r from CSD_TEMP1 where ID = @id) set @lib = (select lib from CSD_TEMP1 where ID = @id) set @code = (select codes_asso from CSD_TEMP1 where ID = @id) set @formula = (select formula from CSD_TEMP1 where ID = @id) set @iteration = (select MAX(id) from CSD_TEMP1) if len(@code)>3 begin insert into CSD_TEMP1 values (@iteration+1,@code_r,@lib,left(@code,3),@formula) set @code = RIGHT(@code,len(@code)-4) update csd_temp1 set CODES_ASSO = @code where ID = @id end FETCH NEXT FROM db_cursor INTO @id END CLOSE db_cursor DEALLOCATE db_cursor set @compteur = @compteur + 1 END
BOB2015
Messages postés
6
Date d'inscription
mercredi 26 décembre 2012
Statut
Membre
Dernière intervention
22 juillet 2013
28 déc. 2012 à 16:06
28 déc. 2012 à 16:06
Ré merci Clément c'est parfait, vous ne donnez pas des cours SQL du coup ?
Bonne journée
Bobo
Bonne journée
Bobo
Morgothal
Messages postés
1236
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
19 mai 2015
183
28 déc. 2012 à 16:11
28 déc. 2012 à 16:11
Oh non je ne donne pas de cours, je ne suis vraiment pas assez calé pour ça :-)
Bonnes fêtes
Bonnes fêtes