Tout est dans le titre, ce tutoriel utilise pour exemple l'insertion de données dans une table en fonction du résultat d'une requête basée sur sur une table liée
Pour notre exemple prenons une base de données simplifiée contenant 2 tables.
La première : UTILISATEURS (ID_USER, NOM, PW, ETAT) gère les utilisateurs.La seconde GROUPES (ID_USER, NOM_GROUP) gère les groupes assignés aux utilisateurs.
Table UTILISATEURS | |||
ID_USER | NOM | PW | ETAT |
1 | DUBULLOS | xdf5DeP | FATIGUE |
2 | PARABELLUM | FgP45T8 | EN FORME |
3 | PERTEFRAKA | FR8e741 | FATIGUE |
Table GROUPES | |||
ID_USER | NOM_GROUP | ||
1 | ADMIN | ||
1 | CHEF | ||
2 | CONSEILLER | ||
2 | CHEF | ||
3 | POMPIER |
En clair ;-)
Je veux que tous utilisateurs dont l’ ETAT est "FATIGUE" appartiennent à un nouveau groupe "BESOIN_VACANCES". Pour ce faire je vais utiliser un CURSEUR qui récupérera tous les ID_USER des utilisateurs (table UTILISATEURS) dont le champ ETAT = "FATIGUE" et pour chacun de ces ID_USER on ajoutera une ligne dans la table GROUPES avec pour NOM_GROUP la valeur "BESOIN_VACANCES".
DECLARE @CPT_ID as int--variable qui récupérera les CPT_ID DECLARE MyCursor CURSOR --mon curseur -- Pour tous les CPT_ID de UTILISATEUR qui ont un ETAT= FATIGUE FOR SELECT ID_USER from UTILISATEURS WHERE ETAT='FATIGUE' OPEN MyCursor -- j'initialise mon curseur -- je le rempli avec mon 1er CP_ID retourné par la requête FETCH MyCursor INTO @CPT_ID -- Tant que je n'ai pas traité tous les CPT_ID de le requête WHILE @@fetch_Status = 0 BEGIN print @CPT_ID + ' - ' INSERT GROUPES (CPT_ID,NOM_GROUP) VALUES(@CPT_ID, 'BESOIN_VACANCES') -- je le rempli avec le CP_ID suivant retourné par la requête FETCH MyCursor INTO @CPT_ID END CLOSE myCursor -- je ferme mon curseur DEALLOCATE myCursor -- je libère la mémoire allouée à ce curseur Print '----------------- Terminé ------------------------'
Voici le nouveau contenu de la table GROUPES
Table GROUPES | |
ID_USER | NOM_GROUP |
1 | ADMIN |
1 | CHEF |
2 | CONSEILLER |
2 | CHEF |
3 | POMPIER |
1 | BESOIN_VACANCES |
3 | BESOIN_VACANCES |