1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| create trigger contrainte_pas_2_emplois_en_meme_temps
on exercer_travail
for insert
BEGIN
declare @dateDbtIns int;
declare @dateFinIns int;
declare @curseur cursor;
declare @date_debut int;
declare @date_fin int;
declare @msg char(110);
declare @errno int;
BEGIN
select @dateDbtIns=CONVERT(INTEGER, inserted.code_date, 112) from inserted;
select @dateFinIns=CONVERT(INTEGER, inserted.date_fin, 112) from inserted;
set @curseur = cursor for (select CONVERT(INTEGER, exercer_travail.code_date, 112), CONVERT(INTEGER, exercer_travail.date_fin, 112) from exercer_travail, inserted where exercer_travail.code_individu = inserted.code_individu);
open @curseur
fetch next from @curseur into @date_debut, @date_fin
while @@FETCH_STATUS = 0
BEGIN
/*Un gros if bien lourd parce qu'apparemment OVERLAPS n'existe pas sur MSSQL 2000 */
if((@dateDbtIns > @date_debut AND (@dateDbtIns < @date_fin OR @dateFinIns < @date_fin))
OR (@date_debut > @dateDbtIns AND (@date_debut < @dateFinIns OR @date_fin < @dateFinIns))
OR (@dateDbtIns = @date_debut AND (@dateFinIns IS NOT NULL AND @date_fin IS NOT NULL)))
BEGIN
set @msg = 'Cette personne exerce déjà un emploi dans cette période. Une personne ne peut exercer 2 emplois en même temps.';
set @errno = 30003;
goto erreur;
END
else
BEGIN
commit
END
fetch next from @curseur into @date_debut, @date_fin
END
return
erreur:
raiserror @errno @msg;
rollback transaction;
END
END |
Partager