Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1198 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Triggers sur insertion avec SQL Server 2005

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Triggers sur insertion avec SQL Server 2005

n°1893233
nail02
Posté le 09-06-2009 à 15:15:53  profilanswer
 

Bonjour,
 
je crée une petite application permettant de gérer les réservations d'un hôtel dans le cadre de mes études.
Je souhaite crée un trigger sous SQL server permettant de vérifier lors de l'enregistrement d'un réservation si la date de début choisi pour une chambre ne correspond pas déjà à la date d'une autre réservation. En d'autres termes empêcher d'enregistrement une réservation si la chambre est déjà réservé.
 
Merci de vos réponses.  
 
ps: voici mes tables:
 
create table client
(numCli char(36) not null default newid(),
nomCli varchar(30),
pnomCli varchar(30),
rueCli varchar(40),
vilCli varchar(40),
cpCli char(5),
telCli char(10)
constraint pkCli primary key(numCli));
 
 
create table categorie
(codCat char(4)not null,
libelle varchar(30)
constraint pkCat primary key(codCat));
 
 
create table chambre
(numCham int not null ,
prix money,
codCat  char(4),
constraint pkCha primary key(numCham),
constraint fkCha foreign key (codCat) references categorie(codCat));
 
create table reservation
( numRes char(36) not null default newid(),
dateRes datetime,
dateDeb datetime,
dateFin datetime,
numCli char(36),
numCham int,
constraint pkRes primary key(numRes),
constraint fkRes1 foreign key (numCli) references Client(numCli),
constraint fkRes2 foreign key (numCham) references Chambre(numCham));

Message cité 1 fois
Message édité par nail02 le 09-06-2009 à 15:18:23
mood
Publicité
Posté le 09-06-2009 à 15:15:53  profilanswer
 

n°1893245
pataluc
Posté le 09-06-2009 à 15:27:55  profilanswer
 

salut,
 

nail02 a écrit :

Merci de vos réponses.


 
ya pas de question dans ton post.  
 
 
++

n°1893249
nail02
Posté le 09-06-2009 à 15:36:59  profilanswer
 

oups oui j'ai oublié la moitié du post :s en fait j'ai du mal pour créer le triggers  
j'ai fait ça:
 
 
 
CREATE TRIGGER exist_reserv
BEFORE INSERT ON reservation as
DECLARE
dateD datetime;
dateF datetime;
BEGIN
dateD := new.dateDeb
FOR EACH ROW  
if( dateD => dateDeb && dateD <DateFin)then
print('Une réservation existe déja pour cette date!');
 END IF;      
END
 
je précise je n'ai jamais crée de triggers :s et j'aurai besoin juste que l'on m'éclaire sur le sujet.

n°1893267
pataluc
Posté le 09-06-2009 à 16:13:04  profilanswer
 

ya toujours pas de question... :P c'est quoi ton problème? tu as une erreur? ca marche pas?

n°1893271
nail02
Posté le 09-06-2009 à 16:16:05  profilanswer
 

Non ça ne marche pas. Comme je n'ai jamais crée de trigger j'ai un peu de mal j'aimerai qu'on m'aide ^^

n°1893297
Modération
Posté le 09-06-2009 à 16:59:08  answer
 

"ça ne marche pas", ça ne veut rien dire ! Qu'est ce qui ne marche pas ? Le trigger renvoie un message d'erreur ? Les données ne sont pas cohérentes ? Fournis un peu plus d'infos, personne n'est devin ici.

n°1894482
MagicBuzz
Posté le 12-06-2009 à 14:38:11  profilanswer
 

Code :
  1. CREATE TABLE reservation
  2. (
  3.  chambre_id int,
  4.  debut datetime,
  5.  fin datetime,
  6.  nb_personnes int
  7. )
  8. go
  9.  
  10. CREATE UNIQUE INDEX ix_reservation ON reservation (chambre_id, debut)
  11. go
  12.  
  13. CREATE TRIGGER trg_reservation_ins
  14. ON reservation
  15. instead of INSERT, UPDATE
  16. AS
  17. begin
  18.  declare @nb int;
  19.  declare @nbdel int;
  20.  declare @chambre_id int;
  21.  declare @debut datetime;
  22.  declare @fin datetime;
  23.  declare @nb_personnes int;
  24.  
  25.  SELECT @nbdel = count(*) FROM deleted;
  26.  
  27.  declare cur cursor FOR SELECT chambre_id, debut, fin, nb_personnes FROM inserted;
  28.  open cur;
  29.  
  30.  fetch next FROM cur INTO @chambre_id, @debut, @fin, @nb_personnes;
  31.  
  32.  while @@fetch_status = 0
  33.  begin
  34.       SELECT @nb = count(*) FROM reservation
  35.       WHERE chambre_id = @chambre_id
  36.       AND debut >= @debut
  37.       AND debut < @fin;
  38.       
  39.       IF @nb > sign(@nbdel)
  40.       begin
  41.         RAISERROR('Les dates de réservation se chevauchent', 16, 1);
  42.       end;
  43.       else
  44.       begin
  45.         INSERT INTO reservation (chambre_id, debut, fin, nb_personnes) VALUES (@chambre_id, @debut, @fin, @nb_personnes);
  46.       end;
  47.  
  48.      fetch next FROM cur INTO @chambre_id, @debut, @fin, @nb_personnes;
  49.  end;
  50.  close cur;
  51.  deallocate cur;
  52. end;
  53. go
  54.  
  55. INSERT INTO reservation VALUES (1, '2009-01-01', '2009-01-15', 1);
  56. INSERT INTO reservation VALUES (1, '2009-01-16', '2009-01-31', 2);
  57. INSERT INTO reservation VALUES (2, '2009-01-10', '2009-01-20', 1);
  58. INSERT INTO reservation VALUES (1, '2009-01-10', '2009-01-20', 1);
  59.  
  60. SELECT *
  61. FROM reservation;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Triggers sur insertion avec SQL Server 2005

 

Sujets relatifs
Une requette sur SQL Server 2008 et Visual BasicInsertion media dans tinymce
Besion d'aide - Backup SQL SERVERErreur requête SQL en VBA dans Excel
[Résolu] aide requête SQL: tri par date desc avec date "nulle" en 1erCherche en vain Visual Studio Express 2005
[VB] accès base SQL via "class Linq to SQL"Insertion image dans une richtextbox
Plus de sujets relatifs à : Triggers sur insertion avec SQL Server 2005


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR