Problème Trigger SQL

ninho44 Messages postés 86 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 19 juin 2009 - 10 juin 2009 à 14:27
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 - 22 juin 2009 à 17:38
Bonjour,

J'ai un trigger qui n'est pas très compliqué, mais j'ai quand même un problème avec.
J'ai une table RESERVATION, avec trois champs ( logement,date,client)
Mon trigger doit vérifier que pour une réservation, le logement n'est pas déjà réservé à la date demandée.

Voici le trigger:

create trigger tg_ins_reserv
on reservation
for insert
as
declare @res_log int, @res_date datetime
select @res_log = res_log from inserted
select @res_date = res_date from insertedif exists (select res_num from reservation where res_log @res_log and res_date @res_date)
BEGIN
    Raiserror ('Logement déjà réservé pour cette date',10,1);
    Rollback Transaction
END
GO

Le problème est que, pour toute date que je renseigne, j'ai le message d'erreur 'Logement déjà réservé pour cette date', et l'insert ne fonctionne pas...

Quelqu'un saurait-il d'où vient le problème ?? MErci d'avance...

2 réponses

crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
12 juin 2009 à 23:58
Cherche du coté de BEFORE INSERT et AFTER INSERT, car à mon avis ton if exists s'éxécute après l'insertion!!
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
22 juin 2009 à 17:38
Il n'existe pas de trigger "befor insert" en SQL Server si c'est bien sur ce SGBD que tourne ce trigger (comme je le suppose vu la syntaxe).

Par contre la syntaxe me parrait assez propice a ce genre d'erreur.

create trigger tg_ins_reserv
on reservation
after insert
as
BEGIN
declare @res_log int, @res_date datetime
select @res_log = res_log from inserted
select @res_date = res_date from insertedif exists (select res_num from reservation where res_log @res_log and res_date @res_date)
BEGIN
    Raiserror ('Logement déjà réservé pour cette date',10,1);
    Rollback Transaction
END
END
GO

Me semble plus approprié.
0
Rejoignez-nous