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 sur UPDATE INSERT de plusieurs champs


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    GEOMATICIEN
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : GEOMATICIEN
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Points : 0
    Points
    0
    Par défaut TRIGGER sur UPDATE INSERT de plusieurs champs
    Bonjour

    Étant novice en SQL et connaissant très peu MSSQL, je viens vers vous pour mettre en place un trigger afin d' effectuer une jointure entre 2 tables (une géometrique et une de gestion) et mettre a jour cette dernière.

    1 : le but du trigger, et de mettre a jour un champ (désignation) en fonction des attributs de plusieurs autres champs(ex: type de câble, et section de câble) (tout cela sur la même table: canalisation_aerienne)
    2 : la jointure (sur le champ désignation crée par le trigger) est la pour récupérer les longueurs sur la table géometrique et les rebalancer sur la table de gestion

    Soyez indulgent s' il vous plait! car c' est une première pour moi!

    EDIT:

    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
    CREATE TRIGGER designation_canalisation_aerienne
    	ON dbo.canalisation_aerienne
    	AFTER INSERT, UPDATE, DELETE
    AS
    BEGIN
    	IF type= 'bt' AND section='70'
    	BEGIN
    		UPDATE dbo.canalisation_aerienne
    		SET designation= 'Cable basse tension 70 mm²'
    	END
    	IF type='hta' AND section='150'
    	BEGIN
    		UPDATE dbo.canalisation_aerienne
    		SET designation= 'Cable haute tension 150 mm²'
    	END
    	[......n ]
    	IF designation is NOT NULL
    	BEGIN
    		UPDATE dbo.table_gestion
    		FROM dbo.canalisation_aerienne as carto
    		join dbo.table_gestion as budget
    			ON budget.quantité=carto.longueur
    	END
    END

    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Postez le code et non pas une image !!!! C'est con une image on peut pas copier le code pour vous aider !!!!

    En cela vous respecterez la charte de postage : http://www.developpez.net/forums/d96...vement-poster/

    Sachez que votre code est totalement faux, car les déclencheurs SQL Server sont ensemblistes !

    C'est dommage j'aurais pu vous donnez la solution mais je ne vais pas me farcir de saisir à la main votre code !!!!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Invité
    Invité(e)
    Par défaut
    C'est n'importe quoi vos requêtes SQL, ce sont juste des erreurs de syntaxe de base.
    Allez lire les tutoriels du site ou consulter les exemple de msdn.

    Pour ce qui est du SET d'une chaine de caractère, c'est entre Quote que ça se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set monChamp = 'nibule moche machin truc'

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    GEOMATICIEN
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : GEOMATICIEN
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Postez le code et non pas une image !!!! C'est con une image on peut pas copier le code pour vous aider !!!!

    En cela vous respecterez la charte de postage : http://www.developpez.net/forums/d96...vement-poster/

    Sachez que votre code est totalement faux, car les déclencheurs SQL Server sont ensemblistes !

    C'est dommage j'aurais pu vous donnez la solution mais je ne vais pas me farcir de saisir à la main votre code !!!!!

    A +
    Pourtant c' est pas faute d'avoir essayé

    J' avais cherché un peu partout pour mettre en place le code, je l' avais sous les yeux
    Mea culpa

    Merci

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    GEOMATICIEN
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : GEOMATICIEN
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    C'est n'importe quoi vos requêtes SQL, ce sont juste des erreurs de syntaxe de base.
    Allez lire les tutoriels du site ou consulter les exemple de msdn.

    Pour ce qui est du SET d'une chaine de caractère, c'est entre Quote que ça se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set monChamp = 'nibule moche machin truc'
    merci
    Comme indiqué , cela n' est pas ma spécialité
    J' apprends sur le tas et je galère: je fais de mon mieux...............

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Voila votre déclencheur récrit :

    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
    CREATE TRIGGER designation_canalisation_aerienne
    	ON dbo.canalisation_aerienne
    	AFTER INSERT, UPDATE, DELETE
    AS
    BEGIN
       UPDATE dbo.canalisation_aerienne
       SET    designation = CASE WHEN "type" = 'bt' AND section = '70' 
    	                             THEN 'Cable basse tension 70 mm²'
                                 WHEN "type" = 'hta' AND section='150' 
    	                             THEN 'Cable haute tension 150 mm²'
                                 WHEN ???
    	                             THEN !!!
    	                    END;
     
       UPDATE budget
       FROM   dbo.canalisation_aerienne as carto
    		  JOIN dbo.table_gestion as budget
    			ON budget.quantité = carto.longueur
       WHERE designation is NOT NULL
    END
    En ce qui concerne votre base...
    Il est stupide d'utiliser des noms d'objets (colonne, table...) qui sont des mots réservés de SQL comme "TYPE" ! Vous allez au devant d'erreurs complexes..
    Il est encore plus stupide d'utiliser des caractères diacritiques (accents, cédille, ligature...) pour ces mêmes noms, comme "quantité". Vous allez avoir de nombreux problèmes d'interfaçage.

    Lisez ceci :
    http://sqlpro.developpez.com/cours/s...age=partie1#L1
    http://sqlpro.developpez.com/cours/motsreserves/


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Attention, en faisant ainsi vous allez mettre à jour toute votre table à chaque insertion, modification et même suppression sur celle-ci !

    Globalement, vous devriez revoir votre modèle. vous devriez plutôt utiliser des colonnes calculées, ou mieux des vues pour votre besoin.

    Typiquement, votre colonne designation pourrait être une simple colonne calculée reprennant votre CASE...WHEN.

    Quant à votre table gestion, je n'ai pas compris ce que vous vouliez obtenir, mais une vue serait certainement préférable.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    GEOMATICIEN
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : GEOMATICIEN
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    oui cela semble moins contraignant le champ calculé

    merci

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    GEOMATICIEN
    Inscrit en
    Juin 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : GEOMATICIEN
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2015
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par SQLpro Voir le message

    En ce qui concerne votre base...
    Il est stupide d'utiliser des noms d'objets (colonne, table...) qui sont des mots réservés de SQL comme "TYPE" ! Vous allez au devant d'erreurs complexes..
    Il est encore plus stupide d'utiliser des caractères diacritiques (accents, cédille, ligature...) pour ces mêmes noms, comme "quantité". Vous allez avoir de nombreux problèmes d'interfaçage.

    Lisez ceci :
    http://sqlpro.developpez.com/cours/s...age=partie1#L1
    http://sqlpro.developpez.com/cours/motsreserves/


    A +

    le champ 'type' je n' y avais pas pensé aux mots reservés
    pour les caractères diacritiques , c' est le gestionnaire de la base de donnée (un intervenant externe) , la j' ai pas la main


    MERCI

Discussions similaires

  1. Trigger sur un INSERT pour incrémenter un champ
    Par leilan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/07/2014, 09h59
  2. Trigger sur update d'un champ
    Par Fused dans le forum Développement
    Réponses: 3
    Dernier message: 05/08/2009, 19h45
  3. "Trigger" sur une insertion : référence au nouveau tuple
    Par samworld dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/06/2007, 22h27
  4. Trigger sur Update et Insert
    Par Jérôme Lambert dans le forum Développement
    Réponses: 2
    Dernier message: 11/12/2006, 13h52
  5. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58

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