Bonjour,
je voudrais savoir s'il est possible de faire une boucle FOR dans une procedure stockée sous SQLServer 2008, si oui je vous pris de me donner un exemple, Merci.
Bonjour,
je voudrais savoir s'il est possible de faire une boucle FOR dans une procedure stockée sous SQLServer 2008, si oui je vous pris de me donner un exemple, Merci.
Pas de FOR, mais du WHILE (qui peut simuler du FOR) !
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci,
En fait je voudrais faire un traitement un peu comliqué, j'ai pu le faire en VB.Net, et j'aimerais le refaire dans une procedure stockée.
voila un exemple:
Ticker MarketCap Date
A 120000 2011-09-22
A 230000 2011-09-24
A 677000 2011-09-25
dans une fenetre j'ai une liste des tickers (dans une chekedlistbox), l'utilisateur a le droit de cocher le nombre de ticker qu'il souhaite.
le principe c'est de calculer la performance de chaque ticker.
Pour le premier enregistrement doit tjrs affecter 1
dans les autres lignes il faut calculer la division de la ligne /la ligne -1.
Le resultat sera:
Date Perf
2011-09-22 1
2011-09-24 230000/120000
2011-09-25 677000/230000.
Sans Boucle comment faire, Merci
En utilisant une fonction de fenêtrage dans une simple requête SQL, par exemple.
Démo :
Jeu d'essais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 USE tempdb; GO
La requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE MA_TABLE (Ticker CHAR(1), MarketCap FLOAT, MaDate DATE); INSERT INTO MA_TABLE VALUES ('A', 120000, '2011-09-22'), ('A', 230000, '2011-09-24'), ('A', 677000, '2011-09-25');
1) appeler une colonne "DATE" est franchement stupide. C'est un mot clef réservé de SQL et ne peut que vous conduire à des ennuis !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 WITH T AS (SELECT *, ROW_NUMBER() OVER(PARTITION BY Ticker ORDER BY MaDate DESC) AS N FROM MA_TABLE) SELECT T1.Ticker, T1.MaDate, T1.MarketCap / COALESCE(T2.MarketCap, T1.MarketCap) FROM T AS T1 LEFT OUTER JOIN T AS T2 ON T1.Ticker = T2.Ticker AND T1.N = T2.N - 1 ORDER BY 1, 2
2) pour apprendre SQL, rien ne vaut mon site ou mon livre.
En particulier :
a) sur les CTE (WITH) : http://sqlpro.developpez.com/cours/s...te-recursives/
b) sur les fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
SQL Pro...
On sent bien là le prof(ce n'est pas péjoratif, loin de là)
Je pense que sihammaster est un dev .net qui doit faire du SQL (comme beaucoup maintenant dans la vie courante) et que si tu commences à lui faire apprendre les cubes pour la seule requête complexe qu'il aura a écrire c'est un peu lourd; D'autant plus que si d'autres dev de sa boîte tombent sur un cube je pense qu'ils feront la même tête qu'une poule qui trouve une fourchette
Je pense qu'un petit curseur serait plus simple a comprendre.
Ou il faudrait que MS fasse des syntaxes simples du type Start With d'Oracle.
Bonne journée
PS: Avant que tu sautes sur ton fauteuil, je sais que la syntaxe d'Oracle n'est pas du SQL, mais il nous faut vivre avec notre temps; c'est finit les DBA études qui ne faisaient que de l'"optimisation"....
Bonjour,
Merci infiniment ca marche nickel!!!!!, vraiment vous etes le MASTER SQLPRO.
Merci bcp serge0934 tu m'a bien compris, je trouve le code .Net plus facile que les requetes complexes parce que je travaill bcp sur le code que sur les requetes.
Merci encore![]()
Certes mais la démarche est totalement fausse, pour trois raisons :Envoyé par serge0934
- SQL est un langage ensembliste, donc il est conçu pour traiter les données dans leur ensemble et non ligne à ligne
- SQL est un langage déclaratif, donc on ne spécifie par comment on veut obtenir un résultat, mais seulement ce que l'on souhaite obtenir, horizontalement et verticalement.
- les curseurs sont terriblement contre-performants.
@++![]()
je suis d'accord avec toi Elsuket....
mais cela fait 27 ans que je fait du SQL, j'ai commencé chez Sybase a Dallas en 1984, je dois en être a plus de 100 missions en temps que DBA architecte ETUDES, cad que je cotoie des petits jeunes dev pour qui le SQL est un monde à part et je vois bien que depuis une dizaine d'années, ils ne savent même plus ce qu'est un UAR (unité arithmétique et logique) car avec des langages comme Java, il ne savent plus ce qui se passent dans un processeur.
Actuellement je bosse pour une société qui a délocalisé le dev SQL de son ERP dans le Sud est asiatique; on reçoit des packages SSIS pour connecter a BO avec des cubes en pagaille, résultat, personne a part moi ne comprends. Voila ce que je voulais exprimer.
J'ai même vu, pour des chargements de fichier plat, des dev qui permettaient de charger les lignes correctes et qui "sautaient" les lignes incorrectes => je te laisse penser au résultat
PS: je regarde encore beaucoup vos articles a SQLpro et toi même car ils sont très bien fait; cela me fait de l'autoformation car les formations MS que j'ai suivi ne m'ont pas apportées grand choses.
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Mes respects pour les 27 ans et pour votre carrière, j'espère que je pourrai en faire autant que vous.Envoyé par serge0934
Je n'ai pas prétendu vous apprendre ce qu'est SQL ni pourquoi il est conçu, mais s'il vous plaît, ne conseillez pas les curseurs !
Je suis sûr que vous savez tout comme moi que même un WHILE est moins moche.
Je crois que sur ce forum on a tous un peu été face à des situations aberrantes. Au début ça saoule, après on en rigole et on essaie de montrer aussi largement que possible qu'on peut faire mieux et plus simpleJ'ai même vu, pour des chargements de fichier plat, des dev qui permettaient de charger les lignes correctes et qui "sautaient" les lignes incorrectes => je te laisse penser au résultat![]()
Merci pour l'encouragementPS: je regarde encore beaucoup vos articles a SQLpro et toi même car ils sont très bien fait; cela me fait de l'autoformation
@++![]()
Quel rapport avec les cubes?Je pense que sihammaster est un dev .net qui doit faire du SQL (comme beaucoup maintenant dans la vie courante) et que si tu commences à lui faire apprendre les cubes pour la seule requête complexe qu'il aura a écrire c'est un peu lourd;
C'est une simple fonction de fenêtrage...
Partager