complément d'information sur les triggers
Au cours de la lecture d'un de vos tutoriels (petit guide de transact sql (V2000)
j'ai appris que le trigger before n'existe pas mais qu'on peut le similer.
"5.3.3. Annulation des effets d'un trigger
Pour empêcher un trigger de produire son effet on peut utiliser le ROLLBACK qui dans ce cas peut porter sur la transaction (ROLLBACK TRANSACTION celle qui a déclenchée le trigger par exemple) ou uniquement le trigger (ROLLBACK TRIGGER) c'est à dire sur les seuls effets de ce dernier.
C'est par ce biais que l'on peut simuler un trigger BEFORE : utiliser un trigger AFTER et le "rollbacker" ou bien utiliser un trigger INSTEAD et insérer quand même dans la table de destination.
je veux simuler un trigger before mais je sais pas comment m'y prendre malgré les instructions du tutoriel.
comment s'y prendre prendre pour inserrer automatiquement une clé primaire qui est sous forme varchar à chaque nouvel enrégistrement?
merci d'avance
où puis-je avoir des informations complémentaires sur les triggers?
l'exemple donné ici ne fonctionne pas parfaitement
j'ai essayé de tester l'exemple donné ds cette discussion a savoir
Code:
1 2 3 4 5 6 7 8
| CREATE TABLE test(c1 char(5) constraint pk_test PRIMARY KEY, c2 char(5));
go
CREATE TRIGGER tr_iof_insert_test ON test instead of INSERT AS
begin
INSERT INTO test(c1, c2)
SELECT c2, c2 FROM inserted;
end;
go |
si la création du trigger ne pose pas de problème, l'insertion de donnée dans la base test en pose.
lorsque je fais
Code:
INSERT INTO test(c2) VALUES('b');
je recois un message d'erreur:
"La colonne 'c1' de la table 'test' ne peut pas être NULL."
cela m'amène a poser deux questions:
1- pourquoi INSERT into.... ne ramène pas de message d'erreur ici?
2- pourkoi l'insertion n'est toujours pas possible?
merci
je crois qu'on s'est pas compris
merci pour toutes les précisions que tu as fais.
le problème est que je suis à la recherche d'une syntaxe pré-insert à partir de after insert ou de instead of.
Pour inserrer des données dans une table auto-increment, l'on n'a pas besoin de créer un trigger.
par contre je veux simuler l'auto-increment de la clé de ma table avec un trigger pre-insert.
comment simuler un trigger pré-insert?
Dans l'exemple que tu as donné, c1 est un primary key et ne s'incremente pas automatiquement
Code:
1 2 3 4 5 6 7 8
| CREATE TABLE test(c1 char(5) constraint pk_test PRIMARY KEY, c2 char(5));
go
CREATE TRIGGER tr_iof_insert_test ON test instead of INSERT AS
begin
INSERT INTO test(c1, c2)
SELECT c2, c2 FROM inserted;
end;
go |