SQL Server : boucle sur une table et affichage

SQL Server : boucle sur une table et affichage - SQL/NoSQL - Programmation

Marsh Posté le 06-06-2008 à 15:51:00    

Bonjour
 
Je souhaite faire un programme tout simple, pour commencer le T-SQL.
Je souhaite parcourir une table d'entiers.
 
A chaque enregistrement, si l'entier est > 10, cela affichera "Enregistrement > à 10", sinon cela affichera "Enregistrement < 10".
Je ne sais pas comment récupérer une ligne d'une requête en T-SQL.  
Si vous pouviez juste me dire par où commencer à chercher, où me montrer l'allure du script, ça m'aiderait à me lancer.
 
Quand je fais  

Code :
  1. While(select * from TableEntier) > 0


 
Cela me renvoie une erreur. Auriez-vous une idée de la syntaxe de l'algo ?  
Merci. :)


Message édité par Sbartacus le 07-06-2008 à 16:17:00
Reply

Marsh Posté le 06-06-2008 à 15:51:00   

Reply

Marsh Posté le 08-06-2008 à 13:06:05    

l'itératif c'est mal en SQL ... tu dois penser "ensembles" pour faire quelque chose de correct et performant

Reply

Marsh Posté le 08-06-2008 à 13:24:53    

Par ensemble, tu entends une requête qui restreint le nombre de résultats ?
En fait, j'ai vu qu'il y avait possibilité de créer des curseurs en T-SQL.
Ce que je veux faire plus tard, c'est parcourir chaque ligne, modifier les champs et insérer ces champs modifiés dans une nouvelle table, à chaque ligne.
 
Car j'ai une table T1, et une table T2. Elles n'ont pas les mêmes contraintes, et n'ont pas la même structure.  
Donc je récupère les données de T1, je les modifie et les insère dans T2.

Reply

Marsh Posté le 08-06-2008 à 15:52:08    

poste toujours les structures de tes tables, dans 95+ % des cas il n'y a pas besoin de curseur, il est préférable de chercher à les éviter

Reply

Marsh Posté le 08-06-2008 à 18:17:26    

Ok merci.
J'ai pas les tables sous les yeux, je les poste dès demain à mon stage. :)

Reply

Marsh Posté le 08-06-2008 à 20:56:10    

a mon avis, un INSERT INTO t (SELECT ...) serait de loin beaucoup plus performant.

Reply

Marsh Posté le 09-06-2008 à 09:37:48    

Bien en fait, je ne sais pas si cela sera possible :  
 
Mes tables possèdent beaucoup de champs, voici pour commencer leur structure simplifiée :
 
Table 1 :
Civilité
Nom
Prénom
Adresse
 
Table 2 :
Civilité (NOT NULL, check Civilite = 'Mr' or Civilit='Mme' or Civilite='Mlle')
Nom (NOT NULL)
Prenom(NOT NULL)
Adresse_num (NOT NULL)
Adresse_type (NOT NULL)
Adresse_nom (NOT NULL)
 
Là où ça pose problème, c'est le champs Adresse. Je prends le champs Adresse de Table1. S'il commence par un nombre, j'insère ce nombre dans (Table2.Adresse_num), j'insère le mot suivant dans (Table2.Adrese_type), et ce qui reste dans (Table2.Adresse_type).

Reply

Marsh Posté le 09-06-2008 à 20:09:52    

insert into T2
 select T1.civilité, T1.nom, T1.prenom, case when T1.adresse > '9' then NULL else substring(T1.adresse, 1, patindex(' ', T1.adresse) end, case when T1.adresse > '9' then NULL else substring
 
etc etc etc (flemme :p )
 
 
mais bon le principal problème vient plutôt du fait que la table T1 n'est pas forcément adaptée à ce qu'on en fait (je suppose qu'il y a des contraintes "historiques" )


Message édité par HappyHarry le 09-06-2008 à 20:12:38
Reply

Marsh Posté le 10-06-2008 à 10:07:38    

Merci beaucoup, j'ai utilisé ce même principe pour remplir T2. :)
Pour le champ des adresses je n'ai pas encore tenté de peur de détruire la base, mais je vais tester cela.
 
Encore merci. :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed