Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2011, 09h36   #1
Invité régulier
 
Inscription : mars 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 42
Points : 8
Points : 8
Par défaut trigger qui se déclenche en fonction de la valeur d'une colonne

Bonjour ,

Je suis bloqué dans le développement d'un trigger .

Contexte :

Deux tables

Mesure
[ID_mesure] PK
[valeur]

Alerte
[ID_alerte]PK
[alerte]



--> L'objectif du trigger est que , lors d'un insert dans Mesure , si la valeur est supérieur à 10 ; on insère une nouvelle ligne dans Alerte


J'ai tenté ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TRIGGER trigger_test
   ON  dbo.mesure 
   AFTER INSERT
AS 
 
IF 'valeur'>10
 
BEGIN
 
INSERT INTO dbo.alerte
		VALUES ('2','ceci est une ligne')
 
END
GO

Mais ca ne fonctionne pas ; Je n'arrive même plus à rajouter de ligne dans mesure.
kelvir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 10h25   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Il y a deux problèmes dans ton trigger :
1/
Code sql :
1
2
 
IF 'valeur'>10

ça, ça ne fonctionnera jamais.
tu compares la chaine de caractères 'valeur' à la valeur 10

Si tu veux utiliser la valeur de la colonne [valeur] de l'insert, il faut que tu utilises la pseudo table INSERTED :
Code sql :
1
2
 
SELECT valeur FROM INSERTED

2/
le deuxième problème, c'est que tu peux insérer plus d'un ligne à la fois, tu dois envisager ce cas, et savoir ce que tu veux faire dans ce cas.
Si dans ce cas, tu ne veux insérer qu'une alerte dans la table alerte, alors tu peux faire :

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
 
CREATE TRIGGER trigger_test
   ON  dbo.mesure 
   AFTER INSERT
AS 
IF EXISTS(SELECT * FROM INSERTED WHERE valeur > 10) 
BEGIN
	INSERT INTO dbo.alerte
	VALUES ('2','ceci est une ligne')
END
 
GO
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 11h54   #3
Invité régulier
 
Inscription : mars 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 42
Points : 8
Points : 8
Ca marche !



MErci
kelvir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h48.


 
 
 
 
Partenaires

Hébergement Web