SQL Server : boucle sur une table et affichage - SQL/NoSQL - Programmation
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
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.
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
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.
Marsh Posté le 08-06-2008 à 20:56:10
a mon avis, un INSERT INTO t (SELECT ...) serait de loin beaucoup plus performant.
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).
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 )
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" )
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.
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
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