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 :

Création déclencheur sur insertion


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Création déclencheur sur insertion
    Bonjour,
    je cherche a créer un déclencheur sur une base de données qui s’exécute a chaque insertion de ligne et qui fait un update sur un champs selon des conditions.
    Table : MVTL
    Après chaque insertion de ligne, vérifier la condition
    Champ à modifier : DÉPÔT
    Condition : WHERE DOS=1 AND PICOD=2 AND TICOD='I' AND SREF1='STD' AND DEPO='DC'.

    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 OR REPLACE TRIGGER DEPOOF
    AFTER INSERT ON MVTL
    -- AFTER INSERT
    FOR EACH ROW
    AS
     
        UPDATE MVTL 
        SET DEPO = 'DP'
        WHERE EXISTS
            (    
                SELECT * FROM MVTL 
                WHERE DOS=1 AND PICOD=2 AND TICOD='I' AND SREF1='STD' AND DEPO='DC'
            )
     
    GO
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir hammouda311283,


    Quel est votre SGBD ? Quelle est la structure de la table MVTL ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Avec MySQL, on peut réaliser l’opération, mais avec un trigger BEFORE :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER DEPOOB BEFORE INSERT ON MVTL
    FOR EACH ROW 
    BEGIN
        IF NEW.DOS = 1 AND NEW.PICOD = 2 AND NEW.TICOD = 'I' AND NEW.SREF 1= 'STD' AND NEW.DEPO = 'DC' THEN
            SET NEW.DEPO = 'DP' ;
         END IF ;	
    END ;                  
     
    GO

    Si votre SGBD est autre ou si ma réponse ne vous convient pas (utilisation de BEFORE au lieu de AFTER), le mieux est que vous postiez dans le forum qui concerne votre SGBD.

    Bonne chance
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut SGBD
    Bonjour,
    mon SGBD est SQL Server 2008

  5. #5
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Bonjour hammouda311283,

    pourquoi un triger votre colonne depot m'as tous l'aire d'une colonne calculée ???

    Qu'elle sont les autres valeurs possible et sont-elle conditionné par une combinaison d'autre colonne ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut triger
    salut,
    la colonne dépôt n'est pas calculer.
    pourquoi un triger?
    parce que l'insertion dans la table mvtl est automatique depuis l'ERP, la colonne DEPOT doit contenir soit DC soit DP et selon la condition de je doit changer le DEPOT de DP vers DC et sa doit être automatique.
    merci

  7. #7
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Create trigger TIU_MVLT_Depo on MVLT
    After insert , update
    as
     
    update MVLT
    Set DEPO='DP'
    Where Dos = 1 and Picod= 2 and Ticod ='I' and SREF='STD' and DEPO ='DC'
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Msg*8197, Niveau*16, État*4, Procédure*TIU_MVLT_Depo, Ligne*1
    L'objet 'MVLT' n'existe pas ou n'est pas valide pour cette opération.


    merci mais après l’exécution ce msg apparaît.

  9. #9
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Le message est Claire il y a une faute sur le nom de table

    Remplace MVLT par le non de ta table .....
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  10. #10
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    MVTL est le nom de la table

  11. #11
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER TIU_MVTL_Depo ON MVTL
    After INSERT , UPDATE
    AS
     
    UPDATE MVTL
    SET DEPO='DP'
    WHERE Dos = 1 AND Picod= 2 AND Ticod ='I' AND SREF='STD' AND DEPO ='DC'
    Attention ce trigger Va modifier toutes les lignes de la table MVTL qui remplisse la condition et pas seulement celles insérer ou mise a jours .... pour cela il nous faudrait le Code LDD de ta tables avec les indexes
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  12. #12
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4
    Par défaut LDD
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    USE [AMECAPCOM]
    GO
     
    /****** Object:  Table [dbo].[MVTL]    Script Date: 09/22/2014 10:57:45 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[MVTL](
    	[MVTL_ID] [int] IDENTITY(1,1) NOT NULL,
    	[CE1] [char](1) NOT NULL,
    	[CE2] [char](1) NOT NULL,
    	[CE3] [char](1) NOT NULL,
    	[CE4] [char](1) NOT NULL,
    	[CE5] [char](1) NOT NULL,
    	[CE6] [char](1) NOT NULL,
    	[CE7] [char](1) NOT NULL,
    	[CE8] [char](1) NOT NULL,
    	[CE9] [char](1) NOT NULL,
    	[CEA] [char](1) NOT NULL,
    	[DOS] [numeric](3, 0) NOT NULL,
    	[REF] [char](25) NOT NULL,
    	[SREF1] [char](8) NOT NULL,
    	[SREF2] [char](8) NOT NULL,
    	[TICOD] [char](1) NOT NULL,
    	[PICOD] [numeric](1, 0) NOT NULL,
    	[TIERS] [char](8) NOT NULL,
    	[OP] [char](3) NOT NULL,
    	[USERCR] [char](20) NOT NULL,
    	[USERMO] [char](20) NOT NULL,
    	[ENRNO] [numeric](9, 0) NOT NULL,
    	[LILG] [numeric](4, 0) NOT NULL,
    	[ETB] [char](3) NOT NULL,
    	[DEPO] [char](3) NOT NULL,
    	[LIEU] [char](12) NOT NULL,
    	[TICKETRES] [numeric](9, 0) NOT NULL,
    	[BLDT] [date] NULL,
    	[DELDT] [date] NULL,
    	[DELDEMDT] [date] NULL,
    	[DELACCDT] [date] NULL,
    	[DELREPDT] [date] NULL,
    	[VTLNO] [numeric](9, 0) NOT NULL,
    	[VTLNA] [numeric](9, 0) NOT NULL,
    	[COLINO] [char](9) NOT NULL,
    	[SERIE] [char](20) NOT NULL,
    	[NST] [char](2) NOT NULL,
    	[STDTSQL] [char](8) NOT NULL,
    	[SENS] [numeric](1, 0) NOT NULL,
    	[PINO] [numeric](8, 0) NOT NULL,
    	[BLASLIEU] [char](12) NOT NULL,
    	[CDVTLNO] [numeric](9, 0) NOT NULL,
    	[BLASVTLNO] [numeric](9, 0) NOT NULL,
    	[PEREMPDT] [date] NULL,
    	[TIERSSTOCK] [char](8) NOT NULL,
    	[RCONO] [numeric](8, 0) NOT NULL,
    	[USERCRDH] [datetime2](7) NULL,
    	[USERMODH] [datetime2](7) NULL,
    	[CR] [numeric](17, 6) NOT NULL,
    	[CNCR] [numeric](3, 0) NOT NULL,
    	[CMP] [numeric](17, 6) NOT NULL,
    	[CRGAM] [numeric](17, 6) NOT NULL,
    	[QTE] [numeric](12, 3) NOT NULL,
    	[REFQTE] [numeric](12, 3) NOT NULL,
    	[STQTE] [numeric](12, 3) NOT NULL,
    	[RESQTE] [numeric](12, 3) NOT NULL,
    	[STRES] [numeric](1, 0) NOT NULL,
    	[STATUS] [numeric](1, 0) NOT NULL,
    	[OFRESCOD] [numeric](1, 0) NOT NULL,
    	[PREVFLG] [numeric](1, 0) NOT NULL,
    	[UNOPROG] [char](15) NOT NULL,
    	[UTPROG] [char](1) NOT NULL,
    	[UPSOLD] [numeric](1, 0) NOT NULL,
    	[CONSTNO] [numeric](8, 0) NOT NULL,
    	[UDEROG] [numeric](1, 0) NOT NULL,
    	[UTIERSCLI] [char](8) NOT NULL,
    	[CDENRNO] [numeric](9, 0) NOT NULL,
    	[UNBBAC] [numeric](3, 0) NOT NULL,
    	[POIN] [numeric](8, 3) NOT NULL,
    	[UNOLOT] [numeric](8, 0) NOT NULL,
    	[ULGPROG] [numeric](4, 0) NOT NULL,
    	[UNONCONF] [numeric](1, 0) NOT NULL,
    	[LIVNCCOD_0001] [char](1) NOT NULL,
    	[LIVNCCOD_0002] [char](1) NOT NULL,
    	[LIVNCCOD_0003] [char](1) NOT NULL,
    	[LIVNCCOD_0004] [char](1) NOT NULL,
    	[LIVNCCOD_0005] [char](1) NOT NULL,
    	[LIVNCCOD_0006] [char](1) NOT NULL,
    	[LIVNCCOD_0007] [char](1) NOT NULL,
    	[LIVNCCOD_0008] [char](1) NOT NULL,
    	[LIVNCCOD_0009] [char](1) NOT NULL,
    	[LIVNCCOD_0010] [char](1) NOT NULL,
    	[LIVNCCOD_0011] [char](1) NOT NULL,
    	[LIVNCCOD_0012] [char](1) NOT NULL,
    	[LIVNCCOD_0013] [char](1) NOT NULL,
    	[LIVNCCOD_0014] [char](1) NOT NULL,
    	[LIVNCCOD_0015] [char](1) NOT NULL,
    	[LIVNCCOD_0016] [char](1) NOT NULL,
    	[LIVNCCOD_0017] [char](1) NOT NULL,
    	[LIVNCCOD_0018] [char](1) NOT NULL,
    	[LIVNCCOD_0019] [char](1) NOT NULL,
    	[LIVNCCOD_0020] [char](1) NOT NULL,
    	[UQCDEI] [numeric](12, 3) NOT NULL,
    	[UCOLINOF] [char](9) NOT NULL,
    	[UPTCOLF] [numeric](1, 0) NOT NULL,
    	[UPTRET] [numeric](1, 0) NOT NULL,
    	[REBUCOD] [char](4) NOT NULL,
    	[UQTERET] [numeric](12, 3) NOT NULL,
    	[USERIECPL] [char](20) NOT NULL,
    	[UMANUT] [char](10) NOT NULL,
    	[UMEMBUN] [char](4) NOT NULL,
    	[EMBUN] [char](4) NOT NULL,
    	[UNONCONFQU] [numeric](1, 0) NOT NULL,
    	[WMCONTNO] [numeric](9, 0) NOT NULL,
    PRIMARY KEY CLUSTERED 
    (
    	[MVTL_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO

  13. #13
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREAte trigger TIU_MVLT_Depo on MVTL
    After insert , update
    as
     
    update dbo.MVTL
    Set DEPO='DP'
    From MVTL 
    Inner Join inserted i
    on I.MVTL_ID = MVTL.MVTL_ID
    Where i.Dos = 1 and I.Picod= 2 and I.Ticod ='I' and I.SREF1='STD' and I.DEPO ='DC'
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  14. #14
    Candidat au Club
    Inscrit en
    Septembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 8
    Points : 4
    Points
    4

Discussions similaires

  1. Création Trigger sur INSERTION
    Par tibblou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2008, 11h13
  2. [Format Date] erreur sur insertion d'une date
    Par philobedo dans le forum SQL
    Réponses: 4
    Dernier message: 14/06/2005, 10h41
  3. Réponses: 10
    Dernier message: 24/02/2005, 14h57
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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