cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
24 août 2006 à 09:48
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 2010
-
29 août 2006 à 14:09
Bonjour,
Je souhaite créé un trigger sur la suppression d'enregistrement d'un table T1. Un table T2 est lié avec T1 par une référence de clé étrangère.
Je dois donc modifier T2 avant de supprimer l'enregistrement de T1.
En résumé, je dois faire un trigger sur un BEFORE UPDATE.
Comment connaitre l'enregistrement qui va être supprimé afin de modifier T2 ?
Avez-vous un exemple?
Merci de vos réponses.
Théo
A voir également:
Before delete trigger mysql
Mysql trigger after delete - Meilleures réponses
Trigger before delete sql server - Meilleures réponses
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 24 août 2006 à 09:55
Bonjour,
Les triggers BEFORE n'existent pas sur SQL Server, au mieu il y a les triggers INSTEAD OF.
Dans le cas présent (pour supprimer en cascade des enregistrements) il y a une solution qui est déjà prévu par Microsoft sur SQL Server depuis la version 2000 :
CREATE TABLE FACTURE
(
FAC_ID int not null identity(1,1) primary key,
CLI_ID int not null ,
FAC_MANTANT Money,
CONSTRAINT [FK_FACTURE_CLIENT] FOREIGN KEY
(
[CLI_ID]
) REFERENCES [CLIENT] (
[CLI_ID]
) ON DELETE CASCADE
);
On a créée une table facture liée à client, et on demande à propager les suppressions en cas de DELETE dans la table client.
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 20102 24 août 2006 à 10:10
Merci pour ta réponse,
Celà colle pas tout à fait a mes besoins.
Pour simplifier, j'ai une table Personne qui à une colonne IdClassement. J'ai une table Classement avec des enreg du type idClassement, libelleClassement. et je voudrais lorsque l'on supprime un enreg de classement mettre à jour ma colonne IdClassement de personne à null.
Personne.IdClassement st liée par contrainte de clé étrangère à Classement.IdClassement.
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 20102 28 août 2006 à 13:58
Lrosque j'ajoute en fin de la description de ma contrainte 'On delete set null' , j'ai le message d'erreur suivant: Syntaxe incorrecte vers le mot clé 'set'
Est ce que cette commande est gérée par SQL Express ?
Voici ma commande.
ALTER TABLE PATIENTS ADD constraint [FK_PATIENTSCLASS_IdPatientClas] FOREIGN KEY ([IdPatientClass]) REFERENCES [PATIENTSCLASS] ([IdPatientClass]) on delete set null;
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 20102 28 août 2006 à 14:08
Merci pour ton aide,
En ce qui concerne la syntaxe, j'ai vérifié sur l'aide du transact-SQL et elle me semble correcte. Pour l'utilisation des triggers, le pb est que la mise à null de mes champs doit être faite avant la suppression de l'enregistrement donc la table deleted n'est pas encore générée.
cs_RMI
Messages postés305Date d'inscriptionvendredi 18 juillet 2003StatutMembreDernière intervention 2 août 20102 29 août 2006 à 12:08
Voilà ce que j'ai en retour
Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 2)
Je pense que la migration n'a pas du ce faire correctement ?
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 29 août 2006 à 12:18
Je ne sait pas si c'est c'est mais il me semble que SQL server 2005 gere un niveau de compatibilité des base de donnée, peut être que ta base de donnée est en mode de compatibilité SQL 2000
Si, tu as SQL Management Studio pour 2005 tu fais un click droit sur la base de donnée dans l'exploreteur de base de donnée, tu choisi propriété dans le popup ensuite tu vas dans la section option et tu vérifie la valeur de l'option : compaztibility level si besion est tu la modifie en : sql server 2005 (90).
en espérant que se soit ca. je réitère ce que je te disait hier sur les triger je me suis cassez les pied a faire une tutos la dessus elle vaux se qu'elle vaut mais a peut de chose près il ya un exemple de ton cas mais comme christiant je te conseil de tout essayé pour passer par les modes automatique de sql server (cascade,set null ou set default) car c'est beaucoup plus rapide et ca évite de faire du code qu'il faut maintenir.