New dans sql serveur

Fermé
hassane03 Messages postés 5 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013 - 2 janv. 2013 à 10:44
FreddyVPI Messages postés 1 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 3 janvier 2013 - 3 janv. 2013 à 08:35
Salut Tous le monde
J'ai voulue de créer un trigger sur SQL serveur j'ai essayé un code mes il me donne ce message :

Si vous prouver me donnez aussi l'équivalence de 'NEW' et 'OLD' Sur SQL Serveur

Msg 4104, Niveau 16, État 1, Procédure TBI_Machine, Ligne 3
L'identificateur en plusieurs parties "NEW.Jour" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Procédure TBI_Machine, Ligne 7
L'identificateur en plusieurs parties "NEW.Vitesse" ne peut pas être lié.
Msg 4104, Niveau 16, État 1, Procédure TBI_Machine, Ligne 11
L'identificateur en plusieurs parties "NEW.Température" ne peut pas être lié.


Voila mon code sql

CREATE TRIGGER TBI_Machine ON Machine INSTEAD OF INSERT AS
BEGIN
	IF (LEN(NEW.Jour)>3) 
		BEGIN
			SELECT 'jour doit etre en 3char' AS 'ErrJour';
		END
	ELSE IF (NEW.Vitesse<0) 
		BEGIN
			SELECT 'La Vitesse ne peut pas etre negative' AS 'EVitesse';
		END
	ELSE IF (NEW.Température < -273)
		BEGIN
			SELECT 'La Température doit etre superieur a -273' AS 'ETempérature';
		END
END;


Je remercie tous les amie

4 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
Modifié par Morgothal le 2/01/2013 à 11:00
La syntaxe d'une création de trigger sous SQL Server est la suivante :
CREATE TRIGGER MonSchema.MonTrigger 
   ON  MonSchema.MaTable 
   AFTER INSERT AS  
BEGIN 
--Et la pseudo-table contenant l(es) insertion(s) est bien INSERTED donc : 
IF (LEN(INSERTED.Jour)>3)  
	BEGIN
		SELECT 'jour doit être en 3 char' AS 'ErrJour';
	END
IF(INSERTED.Vitesse<0)
	BEGIN
		SELECT 'La Vitesse ne peut pas être négative' AS 'EVitesse';
	END
IF(INSERTED.Température<-273)
	BEGIN
		SELECT 'La Température doit être supérieure à -273' AS 'ETempérature';
	END
GO


-------------------
Cordialement,
Clément
1
hassane03 Messages postés 5 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013 1
2 janv. 2013 à 11:26
j'ai changer 'new' par 'INSERTED' mais ca marche pas encor :(

IF (LEN(INSERTED.Jour)>3) 
		BEGIN
			SELECT 'jour doit etre en 3char' AS 'ErrJour';
		END

le code d'erreur:
Msg 4104, Niveau 16, État 1, Procédure TBI_Machine, Ligne 3
L'identificateur en plusieurs parties "INSERTED.Jour" ne peut pas être lié.
1
fjbvqlkjhv Messages postés 315 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 27 août 2013 27
2 janv. 2013 à 11:31
Tu as essayé le code fourni par Morgothal ?
0
hassane03 Messages postés 5 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013 1
2 janv. 2013 à 11:39
oui chaire amie et ca marche pas :( :( sa fais 2jr que cherche a exécuter un trigger sql serveur sen aucune résultat
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
2 janv. 2013 à 12:03
As tu essayé la création automatique ?
Dans le petit "+" à côté du nom de la table, Trigger, clic droit > New Trigger.
Tu as une syntaxe toute faite de cette manière.
0
hassane03 Messages postés 5 Date d'inscription mardi 11 décembre 2012 Statut Membre Dernière intervention 2 janvier 2013 1
2 janv. 2013 à 12:14
c interdis utiliser l'assistant car cet un sujet d'exposer dans la classe
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
2 janv. 2013 à 12:57
C'est juste pour que tu puisses récupérer la syntaxe, après tu l'écris toi-même ;)
0
fjbvqlkjhv Messages postés 315 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 27 août 2013 27
2 janv. 2013 à 10:48
Salut,
C'est pas "inserted" plutôt que "new" sous SQL server ?
0
FreddyVPI Messages postés 1 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 3 janvier 2013
3 janv. 2013 à 08:35
Bonjour,
les triggers SQL server fonctionne avec deux tables qu'il faut utiliser comme telle. INSERTED et DELETED. POur retrouver le nombre de jour dans ton trigger il faut initialiser une variable SELECT @mavariable = jour FROM Inserted
si tu veux connaitre la valeur avant la modification tu peux faire aussi SELECT @mavariable = jour FROM Deleted. Pour savoir si un champ est modifié dans la transaction tu peux utiliser IF UPDATE(jour) BEGIN .... END
0