comment fonctionne trigger instead of insert ?
Salut
j'ai créé un trigger sur une table afin de ne pas enregistrer une requête qui comprend le prénom 'test'
voila ma table
personne (idp, nom, prenom)
et voila mon trigger :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| create trigger tt on personne instead of insert as
begin
if (select prenom from inserted) = 'test'
begin
print 'erreur'
rollback -- afin de stopper l'enregistrement
end
else
begin
print 'ok'
end
end |
après j'ai testé cette requête :
insert into personne values(2, 'hhlkjh', 'jkhkh')
en l'exécutant ça m'affiche ok, une ligne affectée
mais quand je fait "select * from personne" l'enregistrement n'y pas !!!! c'est comme s'il est ignoré ....
comment résoudre ce problème svp ?
merci d'avance
Autre question sur les Triggers INSTEAD OF INSERT
Bonjour,
Je ne vois pas comment créer dans une table de manière performante une colonne qui est calculée automatiquement à l'insert d'un nouvel élément à partir du dernier élément inséré.
Je m'explique: j'aimerais comme dans l'exemple suivant calculer automatiquement la colonne "Somme" à chaque nouvel insert, sachant que je ne ferai jamais de supression et donc ce calcul peut être persistent...
Exemple lors de l'ajout du 4eme element:
Table avant insert:
ID Val Somme
1 0.5 0.5
2 0.1 0.6
3 1.2 1.8
4 0.5 ???????
Je pensais partir sur une colonne calculée ou un trigger INSTEAD OF...
Pourriez-vous me donner votre avis?
Merci!
J'ai fini par faire un trigger...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| CREATE TRIGGER TriggerCalcEvolution
ON dbo.Games
INSTEAD OF INSERT AS
BEGIN
--Création d'une variable pour calculer ma colonne 'Somme'
DECLARE @NewCash AS real
--Si je n'ai aucun enregistrement, je somme mes 2 valeurs CashWin et CashLoose
SET @NewCash=(SELECT TOP(1) CashWin+CashLoose FROM Inserted)
-- Si j'ai déjà des enregistrements, je récupère mon précédent calcul
IF 0<(SELECT count(SessionID) FROM Games )
SET @NewCash=(SELECT TOP(1) Cash+@NewCash FROM Games ORDER BY SessionID DESC)
--J'insere finallement tous les champs d'origine + celui que je viens de calculer
INSERT INTO Games WITH (TABLOCK)
(
SessionID,
Occurtime,
Opponent,
GameType,
DiceCube,
CashWin,
CashLoose,
Cash
)
SELECT
TOP (1) SessionID,
Occurtime,
Opponent,
GameType,
DiceCube,
CashWin,
CashLoose,
@NewCash
FROM
Inserted
ORDER BY SessionID DESC
END |
May it help!