[resolu][TRIGGER] Insert

Insert [resolu][TRIGGER] - SQL/NoSQL - Programmation

Marsh Posté le 29-06-2007 à 16:34:25    

Bonjour a tous.
 
Voila je decouvre les trigger et je souhaiterai réaliser la chose suivante :
 
Tout d'abords je dispose de 3 tables
 
[B]INTERFACE_RESEAU[/B] [AdresseMAC, AdresseIP, ID_Machine_FK]
[B]MACHINE[/B] [ID_Machine -> auto_increment, xxxx, xxxx, xxxx ...]
[B]recep_ip_new_machine[/B] [ip, mac]
 
Mon but etant d'inserer pour chaque ligne de ma table [B]recep_ip_new_machine[/B] les données dans ma table [B]INTERFACE_RESEAU[/B] (donc au fur et a mesure que ma table recep_ip se remplit, executer le trigger d'insertion qui suit pour remplir la table INTERFACE)
 
Pour cela je suis obligé de faire un insert dans la table [B]MACHINE[/B] afin d'incrémenter un ID_Machine pour le recuperer puis l'inserer avec ip et mac dans la table INTERFACE_RESEAU (car champ obligatoire).
 
Voila le trigger que j'ai réalisé en suivant les infos glanées sur le net mais ca ne fonctionne pas.
 

Code :
  1. USE [test_2_IDHI8430]
  2. SET ANSI_NULLS ON
  3. GO
  4. SET QUOTED_IDENTIFIER ON
  5. GO
  6. CREATE TRIGGER testouille
  7.    ON recep_ip_new_machine
  8.    FOR INSERT
  9. AS
  10. BEGIN
  11.     DECLARE @IP NCHAR(15)
  12.     DECLARE @MAC NCHAR(17)
  13.     DECLARE @max_id INT
  14.        SET @IP = (SELECT ip FROM recep_ip_new_machine)
  15.        SET @MAC = (SELECT mac FROM recep_ip_new_machine)
  16.     INSERT INTO MACHINE (NomDNS, NomNetBIOS, NomHote, Role, DateIntegration_FK,
  17.     DateDerniereMAJ_FK, ID_Infrastructure_FK, ID_ResponsableMachine_FK, ID_SystemeExploitation_FK)
  18.     VALUES ('temp', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
  19.      
  20.     SET @max_id = (SELECT MAX(ID_MACHINE) FROM MACHINE)
  21.      
  22.     INSERT INTO INTERFACE_RESEAU (AdresseMAC, AdresseIP, ID_Machine_FK)
  23.     values (@MAC, @IP, @max_id)
  24. END


 
 
Si vous pouviez m'aider ce serait formidable :)


Message édité par nostrea le 02-07-2007 à 10:57:34
Reply

Marsh Posté le 29-06-2007 à 16:34:25   

Reply

Marsh Posté le 29-06-2007 à 16:55:04    

Lors d'un insert dans ma table recep_ip_new_machine, voila le message d'erreur que j'obtiens :
 

Code :
  1. Msg 512, Level 16, State 1, Procedure testouille, Line 12
  2. Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
  3. The statement has been terminated.


 
 
Il semble que cela provienne de l'attribution de valeur de mes deux variable @IP et @MAC.  Je pensais que par definition [U][B]le trigger s'effectuait sur chacune des ligne de la table dès leurs insertions[/B][/U]

Reply

Marsh Posté le 02-07-2007 à 10:56:29    

resolu (ajout de clause where dans mes select)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed