OVH Cloud OVH Cloud

Boucle While ou Fetch

5 réponses
Avatar
michael
Bonsoir,

Je m'interresse depuis peu au T-SQL et ce jour, j'ai souhaité faire une mise
a jour sur un champ précis dans une table.

Exemple :

Je dispose d'un champs strTelTelephone, qui de temps en temps est sur 9 voir
8 meme 7 (ce sont des vieilles données)....
Pour des raisons diverses liés à notre systeme info, je souhaitemettre celui
ci sur 10 meme si il est erroné....

Je code en générale en ASP donc là pas de problème pour faire une Boucle...

Par contre, j'ai voulu expérimenté le T-SQL...

Et j'ai fais quelque chose dans le genre (désolé j'ai pas la requête exacte
sur moi)

While (select strTel from MATABLE where len(strtel) < 10)
Begin
Update MATABLE
Set StrTel = "0" + strTel
End

Bien sur cela n'a pas fonctionné....

Et je me suis interressé ensuite aux curseurs (FETCH) qui si j'ai bien
compris (j'espère) me permette de faire semblablement la meme chose, j'ai
trouvé quelque info la dessus, notamment dans la DOC SQL SERVER mais nacash,
pas moyen non plus de faire un UPDATE cependant je n'avais pas de message
d'erreur, l'analyseur m'indiquait que la requete était acomplie.

Si l'un de vous pouvais me donner la différence entre WHILE et FETCH...et
eventuellement me donner un exemple de mise a jour de champs avec chaque
instruction, j'en serais ravis....

Encore merci a tous et bonne soirée !

5 réponses

Avatar
Fred M
Le fetch n'est peut-être pas dans ton cas obligatoire : et
si on essayait la fonction Space ?
ex :
Update MATABLE
Set StrTel = SPACE(10-LEN(strTel)) + strTel

Ainsi si ton n° fait 8 caract. 10-8 = 2
donc il va insérer à sa gauche space(2) caractères

Je n'ai pas testé mais ça devrait marcher...
Bon courage.
Fred

-----Message d'origine-----
Bonsoir,

Je m'interresse depuis peu au T-SQL et ce jour, j'ai


souhaité faire une mise
a jour sur un champ précis dans une table.

Exemple :

Je dispose d'un champs strTelTelephone, qui de temps en


temps est sur 9 voir
8 meme 7 (ce sont des vieilles données)....
Pour des raisons diverses liés à notre systeme info, je


souhaitemettre celui
ci sur 10 meme si il est erroné....

Je code en générale en ASP donc là pas de problème pour


faire une Boucle...

Par contre, j'ai voulu expérimenté le T-SQL...

Et j'ai fais quelque chose dans le genre (désolé j'ai pas


la requête exacte
sur moi)

While (select strTel from MATABLE where len(strtel) < 10)
Begin
Update MATABLE
Set StrTel = "0" + strTel
End

Bien sur cela n'a pas fonctionné....

Et je me suis interressé ensuite aux curseurs (FETCH) qui


si j'ai bien
compris (j'espère) me permette de faire semblablement la


meme chose, j'ai
trouvé quelque info la dessus, notamment dans la DOC SQL


SERVER mais nacash,
pas moyen non plus de faire un UPDATE cependant je


n'avais pas de message
d'erreur, l'analyseur m'indiquait que la requete était


acomplie.

Si l'un de vous pouvais me donner la différence entre


WHILE et FETCH...et
eventuellement me donner un exemple de mise a jour de


champs avec chaque
instruction, j'en serais ravis....

Encore merci a tous et bonne soirée !


.



Avatar
Fred BROUARD
Il faut faire une curseur for update.

DECLARE cursor_name CURSOR
FOR select_statement
FOR UPDATE [ OF column_name [ ,...n ] ] } ]

dès lors tu pourra modifier directement la colonne dans les varaibles du
curseur.

A +



michael a écrit:
Bonsoir,

Je m'interresse depuis peu au T-SQL et ce jour, j'ai souhaité faire une mise
a jour sur un champ précis dans une table.

Exemple :

Je dispose d'un champs strTelTelephone, qui de temps en temps est sur 9 voir
8 meme 7 (ce sont des vieilles données)....
Pour des raisons diverses liés à notre systeme info, je souhaitemettre celui
ci sur 10 meme si il est erroné....

Je code en générale en ASP donc là pas de problème pour faire une Boucle...

Par contre, j'ai voulu expérimenté le T-SQL...

Et j'ai fais quelque chose dans le genre (désolé j'ai pas la requête exacte
sur moi)

While (select strTel from MATABLE where len(strtel) < 10)
Begin
Update MATABLE
Set StrTel = "0" + strTel
End

Bien sur cela n'a pas fonctionné....

Et je me suis interressé ensuite aux curseurs (FETCH) qui si j'ai bien
compris (j'espère) me permette de faire semblablement la meme chose, j'ai
trouvé quelque info la dessus, notamment dans la DOC SQL SERVER mais nacash,
pas moyen non plus de faire un UPDATE cependant je n'avais pas de message
d'erreur, l'analyseur m'indiquait que la requete était acomplie.

Si l'un de vous pouvais me donner la différence entre WHILE et FETCH...et
eventuellement me donner un exemple de mise a jour de champs avec chaque
instruction, j'en serais ravis....

Encore merci a tous et bonne soirée !





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
bruno reiter [MVP]
effectivement, il n'y a besoin ni de while, ni de curseur, un simple update sur
toute la table comme montre Fred M :
Update MATABLE
Set StrTel = REPLICATE('0',10-LEN(strTel)) + strTel

br

"Fred M" wrote in message
news:01a301c38efc$c818ff10$
Le fetch n'est peut-être pas dans ton cas obligatoire : et
si on essayait la fonction Space ?
ex :
Update MATABLE
Set StrTel = SPACE(10-LEN(strTel)) + strTel

Ainsi si ton n° fait 8 caract. 10-8 = 2
donc il va insérer à sa gauche space(2) caractères

Je n'ai pas testé mais ça devrait marcher...
Bon courage.
Fred

-----Message d'origine-----
Bonsoir,

Je m'interresse depuis peu au T-SQL et ce jour, j'ai


souhaité faire une mise
a jour sur un champ précis dans une table.

Exemple :

Je dispose d'un champs strTelTelephone, qui de temps en


temps est sur 9 voir
8 meme 7 (ce sont des vieilles données)....
Pour des raisons diverses liés à notre systeme info, je


souhaitemettre celui
ci sur 10 meme si il est erroné....

Je code en générale en ASP donc là pas de problème pour


faire une Boucle...

Par contre, j'ai voulu expérimenté le T-SQL...

Et j'ai fais quelque chose dans le genre (désolé j'ai pas


la requête exacte
sur moi)

While (select strTel from MATABLE where len(strtel) < 10)
Begin
Update MATABLE
Set StrTel = "0" + strTel
End

Bien sur cela n'a pas fonctionné....

Et je me suis interressé ensuite aux curseurs (FETCH) qui


si j'ai bien
compris (j'espère) me permette de faire semblablement la


meme chose, j'ai
trouvé quelque info la dessus, notamment dans la DOC SQL


SERVER mais nacash,
pas moyen non plus de faire un UPDATE cependant je


n'avais pas de message
d'erreur, l'analyseur m'indiquait que la requete était


acomplie.

Si l'un de vous pouvais me donner la différence entre


WHILE et FETCH...et
eventuellement me donner un exemple de mise a jour de


champs avec chaque
instruction, j'en serais ravis....

Encore merci a tous et bonne soirée !


.



Avatar
Med Bouchenafa[MVP]
Attention à limiter l'effet d'un UPDATE par une clause WHERE

Update MATABLE
Set StrTel = REPLICATE('0',10-LEN(strTel)) + strTel

WHERE LEN(strtel) < 10

--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"bruno reiter [MVP]" wrote in message
news:
effectivement, il n'y a besoin ni de while, ni de curseur, un simple


update sur
toute la table comme montre Fred M :
Update MATABLE
Set StrTel = REPLICATE('0',10-LEN(strTel)) + strTel

br

"Fred M" wrote in message
news:01a301c38efc$c818ff10$
Le fetch n'est peut-être pas dans ton cas obligatoire : et
si on essayait la fonction Space ?
ex :
Update MATABLE
Set StrTel = SPACE(10-LEN(strTel)) + strTel

Ainsi si ton n° fait 8 caract. 10-8 = 2
donc il va insérer à sa gauche space(2) caractères

Je n'ai pas testé mais ça devrait marcher...
Bon courage.
Fred

>-----Message d'origine-----
>Bonsoir,
>
>Je m'interresse depuis peu au T-SQL et ce jour, j'ai
souhaité faire une mise
>a jour sur un champ précis dans une table.
>
>Exemple :
>
>Je dispose d'un champs strTelTelephone, qui de temps en
temps est sur 9 voir
>8 meme 7 (ce sont des vieilles données)....
>Pour des raisons diverses liés à notre systeme info, je
souhaitemettre celui
>ci sur 10 meme si il est erroné....
>
>Je code en générale en ASP donc là pas de problème pour
faire une Boucle...
>
>Par contre, j'ai voulu expérimenté le T-SQL...
>
>Et j'ai fais quelque chose dans le genre (désolé j'ai pas
la requête exacte
>sur moi)
>
>While (select strTel from MATABLE where len(strtel) < 10)
>Begin
> Update MATABLE
> Set StrTel = "0" + strTel
>End
>
>Bien sur cela n'a pas fonctionné....
>
>Et je me suis interressé ensuite aux curseurs (FETCH) qui
si j'ai bien
>compris (j'espère) me permette de faire semblablement la
meme chose, j'ai
>trouvé quelque info la dessus, notamment dans la DOC SQL
SERVER mais nacash,
>pas moyen non plus de faire un UPDATE cependant je
n'avais pas de message
>d'erreur, l'analyseur m'indiquait que la requete était
acomplie.
>
>Si l'un de vous pouvais me donner la différence entre
WHILE et FETCH...et
>eventuellement me donner un exemple de mise a jour de
champs avec chaque
>instruction, j'en serais ravis....
>
>Encore merci a tous et bonne soirée !
>
>
>.
>




Avatar
michael
Merci à tous....j'essaierais de mettre en pratique ces conseils dès demain
!!!

"Fred BROUARD" a écrit dans le message de
news:
Il faut faire une curseur for update.

DECLARE cursor_name CURSOR
FOR select_statement
FOR UPDATE [ OF column_name [ ,...n ] ] } ]

dès lors tu pourra modifier directement la colonne dans les varaibles du
curseur.

A +



michael a écrit:
> Bonsoir,
>
> Je m'interresse depuis peu au T-SQL et ce jour, j'ai souhaité faire une


mise
> a jour sur un champ précis dans une table.
>
> Exemple :
>
> Je dispose d'un champs strTelTelephone, qui de temps en temps est sur 9


voir
> 8 meme 7 (ce sont des vieilles données)....
> Pour des raisons diverses liés à notre systeme info, je souhaitemettre


celui
> ci sur 10 meme si il est erroné....
>
> Je code en générale en ASP donc là pas de problème pour faire une


Boucle...
>
> Par contre, j'ai voulu expérimenté le T-SQL...
>
> Et j'ai fais quelque chose dans le genre (désolé j'ai pas la requête


exacte
> sur moi)
>
> While (select strTel from MATABLE where len(strtel) < 10)
> Begin
> Update MATABLE
> Set StrTel = "0" + strTel
> End
>
> Bien sur cela n'a pas fonctionné....
>
> Et je me suis interressé ensuite aux curseurs (FETCH) qui si j'ai bien
> compris (j'espère) me permette de faire semblablement la meme chose,


j'ai
> trouvé quelque info la dessus, notamment dans la DOC SQL SERVER mais


nacash,
> pas moyen non plus de faire un UPDATE cependant je n'avais pas de


message
> d'erreur, l'analyseur m'indiquait que la requete était acomplie.
>
> Si l'un de vous pouvais me donner la différence entre WHILE et


FETCH...et
> eventuellement me donner un exemple de mise a jour de champs avec chaque
> instruction, j'en serais ravis....
>
> Encore merci a tous et bonne soirée !
>
>

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************