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 :
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 :
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
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
merci.
"Christian Robert" <christian.robert@winwise.fr (sansspam)> a écrit dans le
message de news: 7B3FAF26-1AD5-48C5-BD2D-F6A1A36E3B1D@microsoft.com...
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 :
"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 :