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

MS SQL Server Discussion :

Trigger pour un update


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 45
    Points : 46
    Points
    46
    Par défaut Trigger pour un update
    Bonsoir à tous ,

    Je voulais savoir comment creer un trigger pour faire un update par rapport à une modification de valeur.

    Ma base est la suivante :

    Table ou je souhaite le trigger sur la colonne Value :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [dbo].[freefield](
    	[carrierobjectid] [bigint] NOT NULL,
    	[freefieldobjectid] [bigint] NOT NULL,
    	[value] [varchar](150) NULL,
    	[objectid] [bigint] NOT NULL,
    Table ou je souhaite l' UPDATE de la colonne objectid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [dbo].[person](
    	[lastname] [varchar](50) NULL,
    	[initials] [varchar](40) NULL,
    	[objectid] [bigint] NULL,

    Donc le principe est quand dans la colonne Value il y a 'Y' il faut faire un update de la colonne objectid par NULL


    J'ai essayer un debut de requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER update_person ON freefield FOR INSERT, UPDATE AS
    BEGIN
    DECLARE
    @carrierobjectid          BIGINT
    update person
    set objectid = NULL
    where objectid=@carrierobjectid
    END
    Merci par avance de vos reponses !!

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Regardez ici, ici, et enfin ici pourquoi votre trigger ne peut pas fonctionner correctement

    Voici donc le bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER update_person
    	ON dbo.freefield
    FOR INSERT, UPDATE
    AS
    BEGIN
    	UPDATE		dbo.person
    	SET		objectid = NULL
    	FROM		dbo.person AS P
    	INNER JOIN	INSERTED AS I ON P.objectid = I.carrierobjectid
    END
    @++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Bonjour ,

    Merci pour votre réponse et effectivement cela fonctionne !!
    Par contre peut on effectuer un filtre de la table freefield ?
    Ou par le biais d'une vue mais le trigger ne fonctionne plus?
    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
    USE [mydb]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TRIGGER [dbo].[update_person]
    	ON [dbo].[View_freefield]
    INSTEAD OF INSERT, UPDATE 
    AS
    BEGIN
    	UPDATE		dbo.person
    	SET		objectid = NULL
    	FROM		dbo.person AS P
    	INNER JOIN	INSERTED AS I ON P.objectid = I.carrierobjectid
    END
    Bonne soirée.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Par contre peut on effectuer un filtre de la table freefield ?
    Oui, il vous suffit de rajouter un filtre sur la table virtuelle INSERTED :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER update_person
    	ON dbo.freefield
    FOR INSERT, UPDATE
    AS
    BEGIN
    	UPDATE		dbo.person
    	SET		objectid = NULL
    	FROM		dbo.person AS P
    	INNER JOIN	INSERTED AS I ON P.objectid = I.carrierobjectid
    	WHERE		I.carrierobjectid = 99
    END
    Ou par le biais d'une vue mais le trigger ne fonctionne plus?
    Si votre vue contient le WHERE objectid=99, il n'y a pas de problème.

    @++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    Merci ca fonctionne Nickel !!
    Mon premier trigger est une reussite grace à vous

    Bonne soirée.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 34
    Points : 33
    Points
    33
    Par défaut Update avec une valeur NULL
    Vous pouvez faire un update ou insert avec une valeur NULL avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmd.CommandText = "Update [Table] SET XXX= @XXX WHERE Key= @Key"
    cmd.Parameters.Add("XXX", Data.DbType.String).Value = DBNull.Value
    il faut obligatoirement passer par l'ajout d'un paramètre, si non ca marche pas

    le Data.DbType.String est le type de donnée de votre colone, ca peut être date, string...

    Bon courage
    www.ejob.ma

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

Discussions similaires

  1. Trigger pour UPDATE
    Par benjamin122 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 05/12/2014, 10h59
  2. Réponses: 2
    Dernier message: 10/06/2014, 21h26
  3. Trigger pour Update after (last Update)
    Par LaPanic dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/01/2011, 12h00
  4. Utilisation des triggers pour un update (niveau débutant)
    Par bipbip2006 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/11/2010, 09h16
  5. trigger pour update autre table
    Par onet dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/05/2009, 08h59

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