New dans sql serveur

hassane03 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
FreddyVPI Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

4 réponses

Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   27
 
Tu as essayé le code fourni par Morgothal ?
0
hassane03 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   183
 
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   Statut Membre Dernière intervention   1
 
c interdis utiliser l'assistant car cet un sujet d'exposer dans la classe
0
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
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   Statut Membre Dernière intervention   27
 
Salut,
C'est pas "inserted" plutôt que "new" sous SQL server ?
0
FreddyVPI Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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