OVH Cloud OVH Cloud

aide sur trigger ?

2 réponses
Avatar
AB6 FG
Hello,

sur SQL,
J'ai créé une table 'tt'
un champ 'NUMERO' de type int

trigger :

CREATE TRIGGER FG_INSERT_tt ON [dbo].[tt] FOR INSERT AS
IF EXISTS(Select tt.NUMERO From tt,inserted WHERE
tt.NUMERO=inserted.NUMERO)
BEGIN
Raiserror('Erreur Absys',16,1) WITH SETERROR
Rollback Transaction
END



Mon problème : toujours une erreur, alors que si j'ai dans ma table les
valeurs 1 et 2, si j'essayes 3, ça doit passer......càs tout con, mais je
bloque :

Please HELP !

FG

2 réponses

Avatar
Christian Robert
Bonsoir,

Je pense que l'erreur vient de celà :

Select tt.NUMERO From tt,inserted WHERE tt.NUMERO=inserted.NUMERO

Le problème c'est que la pseudo-table inserted ce qui donne en version avec
un JOIN :

Select tt.NUMERO
FROM tt
JOIN inserted ON tt.NUMERO=inserted.NUMERO

Et de fait cette requête renvoie toujours quelque chose, vu que le trigger
se déroule après l'action.

Le mieux serait ceci je pense

SELECT COUNT(*)
FROM tt
GROUP BY numero
HAVING COUNT(*) > 1

Si çà existe --> ROLLBACK.

Encore mieux... une contrainte unique (solution idéale et sans TRIGGER)

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"AB6 FG" a écrit :



Hello,

sur SQL,
J'ai créé une table 'tt'
un champ 'NUMERO' de type int

trigger :

CREATE TRIGGER FG_INSERT_tt ON [dbo].[tt] FOR INSERT AS
IF EXISTS(Select tt.NUMERO From tt,inserted WHERE
tt.NUMERO=inserted.NUMERO)
BEGIN
Raiserror('Erreur Absys',16,1) WITH SETERROR
Rollback Transaction
END



Mon problème : toujours une erreur, alors que si j'ai dans ma table les
valeurs 1 et 2, si j'essayes 3, ça doit passer......càs tout con, mais je
bloque :

Please HELP !

FG





Avatar
AB6 FG
merci.


"Christian Robert" (sansspam)> a écrit dans le
message de news:
Bonsoir,

Je pense que l'erreur vient de celà :

Select tt.NUMERO From tt,inserted WHERE tt.NUMERO=inserted.NUMERO

Le problème c'est que la pseudo-table inserted ce qui donne en version
avec
un JOIN :

Select tt.NUMERO
FROM tt
JOIN inserted ON tt.NUMERO=inserted.NUMERO

Et de fait cette requête renvoie toujours quelque chose, vu que le trigger
se déroule après l'action.

Le mieux serait ceci je pense

SELECT COUNT(*)
FROM tt
GROUP BY numero
HAVING COUNT(*) > 1

Si çà existe --> ROLLBACK.

Encore mieux... une contrainte unique (solution idéale et sans TRIGGER)

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"AB6 FG" a écrit :



Hello,

sur SQL,
J'ai créé une table 'tt'
un champ 'NUMERO' de type int

trigger :

CREATE TRIGGER FG_INSERT_tt ON [dbo].[tt] FOR INSERT AS
IF EXISTS(Select tt.NUMERO From tt,inserted WHERE
tt.NUMERO=inserted.NUMERO)
BEGIN
Raiserror('Erreur Absys',16,1) WITH SETERROR
Rollback Transaction
END



Mon problème : toujours une erreur, alors que si j'ai dans ma table les
valeurs 1 et 2, si j'essayes 3, ça doit passer......càs tout con, mais je
bloque :

Please HELP !

FG