J'ai certaines procédures stockées que j'ai besoin d'écrire contre une bête méchante d'une base de données. Je dois parcourir une table (application) et extraire des valeurs d'autres tables (certaines sont des valeurs aggerate/averages/etc) en utilisant l'id_application de la table d'application.Bouclage T-SQL pour créer un jeu d'enregistrements
Jusqu'à présent, j'ai:
declare @id INT
declare app cursor for
SELECT application_id from application
OPEN app
FETCH NEXT FROM app
INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT a.NAME_LAST, a.NAME_FIRST, ca.status, (SELECT AVG(score) FROM reviews WHERE application_id = @id), (SELECT count(*) FROM reviews WHERE application_id = @id) FROM application a, committee_applications ca WHERE a.application_id = ca.application_id AND a.application_id = @id
FETCH NEXT FROM app INTO @id
END
CLOSE app
DEALLOCATE app
Ce qui me donne les résultats que je veux, mais je suis sûr qu'il ya un moyen plus propre de le faire, et je ne peux pas sembler faire le saut mental aujourd'hui pour le faire correctement. Quelqu'un pourrait-il indiquer une meilleure façon de le faire car cela me semble vraiment moche.
En outre, il semble que je devrais stocker ces valeurs dans une table temporaire, puis renvoyer les résultats complets au lieu d'exécuter l'instruction SELECT un par un.
Toutes les suggestions seraient grandement appréciées.
Merci.
Merci, ça berce et c'est ce que je cherchais. Je savais qu'il y avait une façon beaucoup plus propre de le faire. Maintenant, je dois juste marteler le reste de ce SQL fou en elle. –