Professional Documents
Culture Documents
NET
GESTION DES STAGIAIRES
Soit la base de donnes suivante : Stagiaire (Nstagiaire, Nom, Prnom, datenaiss, , dateinscri, Adresse, tel, #Nfilire) Filire(Nfilire, Intitulfil, Capacit, nbreannes) Notation(Nnotation ,#Nstagaire, #Nmodule, note) Module (Nmodule, intitulmod, masse horaire) Crer les procdures stockes 1) La procdure permettant de lister les stagiaires dune filire donne Create proc ex1 @fil char(30) As Begin Select stagiaire.* from stagiaire , filiere Where stagiaire.nfilre = filire.nfilire and intitulfil=@fil End 2) La procdure permettant dafficher les stagiaires ayant lge dans la tranche prcis par lutilisateur CREATE PROC ex2 @d1 int ,@d2 int AS BEGIN SELECT * , datediff(year,datenaiss,getdate()) as age FROM STAGIAIRE Where datediff(year,datenaiss,getdate()) beetween (@d1 and @d2) END 3) Augmenter dun point les notes des stagiaires dans le module mtier et formation CREATE PROC ex3 AS BEGIN Update notation Set note =note+1 Where n_module in (select n_module from module formation) END
where intitulmod=mtier et
11)
Affecter une note pour un stagiaire ; vrifier lexistence du stagiaire et du module. Vrifier si le stagiaire est dj not pour ce module.
create proc ex11 @ns int, @m car(3),@not float As Begin If exists (select * from stagiaire where n_stagiaire=@ns) Begin If exists (select * from module where n_module=@m) Begin If exists (select * from notation where n_stagiaire=@ns and n_module=@m)
end Else Begin Print le module nexiste pas End Else Begin Print le stagiaire nexiste pas End end
12)
supprimer les stagiaires inscrits lanne dernire et stocker les dans la table archive
if exists (select * from stagiaire where datediff(year,dateinscrip ,getdate())=1) begin select * into archive from stagiaire where datediff(year,dateinscrip ,getdate())=1 delete from stagiaire where datediff(year,dateinscrip ,getdate())=1 end else begin print aucun stagiaire end 13) Afficher les informations des stagiaires qui ont plus de deux notes.
Select * from stagiaire Where n_stagiaire in (select n_stagiaire from notation group by n_stagiaire having count(n_stagiaire)>=2)
Delete from stagiaire where n_stg not in (select n_stg from notation where n_module in (select n_module from module where intmod=conception et modelisation)) 16) afficher dans une colonne nomme observation la valeur Echec ou rachet ou admis en fonction de la moyenne obtenue par le stagiaire create proc observation as begin SELECT 'Observation' = CASE WHEN avg(note) < 9 THEN 'Echec' WHEN avg(note)>= 9 and avg(note)< 10 THEN 'Rachet' WHEN avg(note) >= 10 THEN 'Admis' ELSE 'Erreur de formule!' END, avg(note) AS 'moyenne', n_stagiaire as 'numro stagiaire' FROM notation group by n_stagiaire ORDER BY avg(note) desc end 17) Crer une procdure compter qui permet afficher le nombre de stagiaires inscrits dans une filire donne CREATE PROCEDURE compter @fil int , @x int output AS begin select @x = count(*) from stagiaire where n_fil=@fil print le nombre de stagiaires inscrits est :+ convert(varchar(3),@x)
17) Crer une procdure nomme affecter qui permet de modifier la valeur du champ capacit en lui affectant le nombre de stagiaires inscrits Utiliser la procdure compter pour calculer le nombre de stagiaires inscrits dans la filire CREATE proc affecter @fil int as declare @nb int begin set @nb=0 exec liste @fil , @nb output update filiere set capacite=@nb where n_fil=@fil end GO 18) effectuer la mme opration pour lensemble des filires CREATE PROCEDURE iteratif1 AS declare @c int declare @n int begin select @n=select count(*) from filiere set @c=1 while @c <= @n begin exec affecter @c print la filire n+@c+ a t modifie set @c=@c+1 end end