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 de trigger entre 2 BDD


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Par défaut Création de trigger entre 2 BDD
    Bonjour

    je dois créer un trigger qui va mettre à jour des données d'une bdd à une autre
    pour cela je voudrais rendre paramétrable le nom de la bdd cible pour pouvoir changer bdd facilement.

    apres des tests sur le trigger il s'avere que les execute n'acceptent pas d'utiliser les tables inserted et deleted alors que je suis obligé de faire des concaténations de chaine pour utiliser mon paramétrage.
    Y a t' il une autre solution?

    Merci

    Gaétan

    voir l'exemple :

    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
    la fonction dbo.base_prod('Ma_table') renvoie >> nomBDD.dbo.Ma_table
     
    ALTER TRIGGER [dbo].[MAJ_TABLE]
       ON  [dbo].[Contact_Traitement]
       AFTER INSERT
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
        -- Insert statements for trigger here
    declare @sq as nvarchar(500)
     
    ---- Ajouter les nouvelles données
    set @sq = 'insert into '+ dbo.base_prod('Ma_table') + 
    		' select contact.A_code,year(A_date_debut),year(a_date_fin),a_flag_traitement  from inserted T left join Contact on T.contact_id=Contact.contact_id '
     
    exec (@sq)

  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 : 44
    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
    Par défaut
    Bonjour,

    Cela est normal puisque EXEC utilise un autre contexte d'exécution quel le contexte local au module SQL, ici votre trigger.

    Il est bizarre que vous ayez besoin de copier vos données dans des tables différentes, et cela montre que votre modèle de données n'est pas correct à ce niveau là.

    Néanmoins pour venir à bout de votre problème, il suffit de créer une vue dans dbo.base_prod qui spécifie la bonne table (vous pouvez créer cette vue pas SQL dynamique), et réaliser l'INSERT sur cette vue.
    Cette vue se verrait attacher un trigger (dont vous pouvez aussi générer le code en SQL dynamique) qui réalisé l'insertion dans la table sous-jacente à la vue.

    @++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Par défaut
    bonjour

    >Il est bizarre que vous ayez besoin de copier vos données dans des tables >différentes, et cela montre que votre modèle de données n'est pas correct à >ce niveau là.
    en effet mais c'est temporaire car il s'agit d'une migration de notre outil crm vers un autre, l'alimentation des données se fera pour une petite periode le temps de refaire toutes les interfaces manquantes...


    >Néanmoins pour venir à bout de votre problème, il suffit de créer une vue >dans dbo.base_prod qui spécifie la bonne table (vous pouvez créer cette >vue pas SQL dynamique), et réaliser l'INSERT sur cette vue.
    >Cette vue se verrait attacher un trigger (dont vous pouvez aussi générer le >code en SQL dynamique) qui réalisé l'insertion dans la table sous-jacente à >la vue.
    J'avoue ne pas bien comprendre la manoeuvre!
    le but est de mettre à jour les données dans l' "ancienne" table de l' "ancienne" BDD dès qu'il se passe une modification ou insertion dans le nouveau produit crm. le tout en pouvant choisir la base de destination via la fonction scalaire base_prod.


    merci

  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 : 44
    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
    Par défaut
    Veillez à utiliser les balises appropriées quand vous postez

    - balises [code] : petit bouton # à droite de la barre d'outils
    - balises [quote] : bouton à gauche du bouton #

    en effet mais c'est temporaire car il s'agit d'une migration de notre outil crm vers un autre, l'alimentation des données se fera pour une petite periode le temps de refaire toutes les interfaces manquantes...
    OK

    J'avoue ne pas bien comprendre la manoeuvre!
    le but est de mettre à jour les données dans l' "ancienne" table de l' "ancienne" BDD dès qu'il se passe une modification ou insertion dans le nouveau produit crm. le tout en pouvant choisir la base de destination via la fonction scalaire base_prod.
    Excusez-moi, j'ai mal lu.
    Je pense que vous n'avez pas d'autre choix que de copier les données issues de INSERTED dans une "vraie" table, pour ensuite pouvoir vous passer de celle-ci dans votre code SQL dynamique.

    Si la table source est très souvent affectée par des insertions de données, je vous conseille d'utiliser la procédure stockée système sp_executeSQL qui permet de réutiliser les plans de requête.

    @++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Ne serait-il pas plus judicieux de recourir à une réplication ? Parce que si l'on des serveur est arrêté ou le réseau occupé, votre système sera bloqué !

    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/ * * * * *

Discussions similaires

  1. [PL/SQL] [9i] Pblm lors de la création de triggers
    Par ftrifiro dans le forum Oracle
    Réponses: 3
    Dernier message: 27/06/2006, 15h08
  2. Créations et liens entre Javadoc
    Par marchand_de_sable dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 10/06/2006, 16h07
  3. relation maitre/esclave entre 2 BDD sur MySQL?
    Par root76 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 14/10/2005, 14h37
  4. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01
  5. [IB][IBQUERY][D7 pro] Création de Triggers à la volée.
    Par N1bus dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/10/2004, 14h23

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