New dans sql serveur

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

  1. 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. 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. Tu as essayé le code fourni par Morgothal ?
      2. oui chaire amie et ca marche pas :( :( sa fais 2jr que cherche a exécuter un trigger sql serveur sen aucune résultat
      3. 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.
      4. c interdis utiliser l'assistant car cet un sujet d'exposer dans la classe
      5. C'est juste pour que tu puisses récupérer la syntaxe, après tu l'écris toi-même ;)
    2. Salut,
      C'est pas "inserted" plutôt que "new" sous SQL server ?
      1. 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