IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

trigger avec insert


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut trigger avec insert
    sql server 2005

    Bonjour a tous

    je souhaite creer un trigger qui creer ecrit dans un fichier txt apres chaque insert sur une table.
    J'ai regardé un peu sur internet et voici le trigger que j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TRIGGER myTrigger
    ON VPX_ACCESS
    AFTER INSERT
    AS
      DECLARE @cmd nvarchar(1024)
      DECLARE @OpC_MsgText nvarchar(1024)
      DECLARE @ID int
      DECLARE @Principal nvarchar(300)
      SELECT @ID = (SELECT ID FROM VPX_ACCESS WHERE ID=9)
      SELECT @Principal = (SELECT PRINCIPAL FROM VPX_ACCESS WHERE ID=9)
      	BEGIN
    		SET @OpC_MsgText=@ID +  @Principal
    		SET @cmd = 'echo ' + @OpC_MsgText + ' > Z:\temp\VMwareView-events.txt'
    		EXEC master..xp_cmdshell @cmd, no_output
    	END
    Lorsque j'execute ce trigger j'ai le message suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 245, Level 16, State 1, Procedure myTrigger, Line 12
    Error de conversión al convertir el valor nvarchar 'prueba' al tipo de datos int.
    Je ne compred pas cette erreur de conversion...
    Quelque'un a une idée?

    D'avance merci

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Ca vient de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @OpC_MsgText=@ID +  @Principal
    Comme il trouve @ID qui est un int, il s'attend à trouver un autre nombre à additionner. Or tu lui balances @Principal qui est du nvarchar.

    Converti d'abord @ID en nvarchar, via un CAST; exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @OpC_MsgText=CAST(@ID AS nvarchar(5)) +  @Principal

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour

    ok j'ai ceci maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TRIGGER myTrigger
    ON TABLEA
    AFTER INSERT
    AS
      DECLARE @cmd nvarchar(1024)
      DECLARE @OpC_MsgText nvarchar(1024)
      DECLARE @ID nvarchar
      DECLARE @Principal nvarchar(300)
      SELECT @ID = (SELECT CAST(ID as nvarchar) FROM TABLEA)
      SELECT @Principal = (SELECT PRINCIPAL FROM TABLEA)
      	BEGIN
    		SET @OpC_MsgText=@ID +  @Principal
    		SET @cmd = 'echo ' + @OpC_MsgText + ' > Z:\temp\monfichier.txt'
    		EXEC master..xp_cmdshell @cmd, no_output
    	END
    Ça ne fait plus l'erreur du int mais maintenant j'ai une autre erreur qui dit que la subquery retourne plus d'un resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg 512, Level 16, State 1, Procedure myTrigger, Line 9
    La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
    Si dans ces requetes j'ajoure where ID=x
    la ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT @ID = (SELECT CAST(ID as nvarchar) FROM TABLEA)
    SELECT @Principal = (SELECT PRINCIPAL FROM TABLEA)
    Mais bon je vais voir ça avec les developpeurs...
    Merci pour tout !

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Si dans ces requetes j'ajoure where ID=x
    la ça marche
    C'est logique puisque tu met dans une variable un retour : si ton select renvoi plusieurs lignes, tu ne peut pas mettre cela dans un scalaire.

    Le message est tout à fait clair (sauf si tu as des problèmes avec le castillan )

    Rappel toi que dans un trigger SQL SERVER tu peux travailler avec les vue inserted (qui contient les lignes ajoutées ou modifiées) et deleted (pour les trigger update et delete qui contient les valeurs avant suppression/modification).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Haaa ok
    la vue inserted serait l'equivalent des curseurs en PL/SQL
    Ok je vais remplacer par la vue en question pour voir.
    Cool
    Merci encore

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    Haaa ok
    la vue inserted serait l'equivalent des curseurs en PL/SQL
    Pas du tout.

    En gros inserted est l'équivalent de :new, sauf que :new fait référence a une seule ligne. (et les triggers "lignes" n'existe pas en SQL SERVER).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour a nouveau

    voici mon trigger en entier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    CREATE TRIGGER OVO_notification
    ON VE_event
    AFTER INSERT 
    AS
      DECLARE @cmd nvarchar(1024)
      DECLARE @OpC_MsgText nvarchar(1024)
      DECLARE @OpC_Severity nvarchar(20)
      DECLARE @View_EventID int
      DECLARE @View_EventType nvarchar(512)
      DECLARE @View_Module nvarchar(512)
      DECLARE @View_Severity nvarchar(512)
      DECLARE @View_EventMsg nvarchar(512)
      DECLARE @View_Time datetime
     
      SELECT @View_EventID = (SELECT EventID FROM INSERTED)
      SELECT @View_EventType = (SELECT EventType FROM INSERTED)
      SELECT @View_Module = (SELECT Module FROM INSERTED)
      SELECT @View_Severity = (SELECT Severity FROM INSERTED)
      SELECT @View_EventMsg = (SELECT ModuleAndEventText FROM INSERTED)
      SELECT @View_Time = (SELECT Time FROM INSERTED)
     
      SELECT @OpC_Severity =
        CASE
          WHEN @View_Severity 'INFO' THEN 'normal'
          WHEN @View_Severity 'WARNING' THEN 'warning'
          WHEN @View_Severity 'ERROR' THEN 'critical'
          WHEN @View_Severity 'AUDIT_SUCCESS' THEN 'normal'
          WHEN @View_Severity 'AUDIT_FAIL' THEN 'normal'
          ELSE 'critical'
        END;
     
      BEGIN TRY
        SET @OpC_MsgText = 'MSG: "' + @View_EventID + '|' + @View_EventType + '|' + @View_Module + '|' + @View_Severity + '|' + @View_EventMsg + '|' + @View_Time + '"'
        SET @cmd = 'echo ' + @OpC_MsgText + ' > e:\temp\VMwareView-events.txt'
        EXEC master..xp_cmdshell @cmd, no_output
      END TRY
      BEGIN CATCH
        ### Statements error ###
      END CATCH;
    GO
    L'erreur est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg 102, Level 15, State 1, Procedure OVO_notification, Line 27
    Incorrect syntax near 'INFO'.
    Msg 102, Level 15, State 1, Procedure OVO_notification, Line 41
    Incorrect syntax near '###'.

    Une idée

  8. #8
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Ok
    il manque le = dans le case...
    C'est arrangé

    Je ferme ce post tout roule.
    Merci a tous et bon NOEL !!!

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Muy bien. Feliz navidad !

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Jajaja
    Muchas gracias
    y feliz año nuevo !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger avec Insertion à partir d'une autre table
    Par ALexSql dans le forum Développement
    Réponses: 1
    Dernier message: 15/03/2012, 22h41
  2. Problème avec trigger (table INSERTED)
    Par ygrim dans le forum Développement
    Réponses: 1
    Dernier message: 20/04/2008, 21h00
  3. TRIGGER avec inserted + UPDATE sur INSERTED
    Par shaka84 dans le forum Développement
    Réponses: 3
    Dernier message: 12/04/2006, 10h26
  4. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo