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

Langage SQL Discussion :

Trigger qui met à jour un nombre de table variable.


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    mmn
    mmn est déconnecté
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Par défaut [résolu] Trigger qui met à jour un nombre de table variable.
    Bonjour à tous,


    J'ai besoin d'aide pour programmer un trigger (déclencheur) insert qui met à jour plusieurs table qui sont sur d'autre base de donnée que la table qu'il protège.

    Pour shématiser :

    J'ai une base de donnée 'model' qui possède une table 'table1'
    J'ai plusieurs autres base de donnée qui ont évidemment chacune un nom différent. Et toutes ces base de donnée ont une table appelée 'table2' (même nom de la table pour toute les bases de données).

    Ce que je veux faire :

    Quand un nouvel enregistrement est créé dans la table 'model.table1', je veux que mon trigger insert un nouvel enregistrement dans toutes les tables table'2' de toutes les autres base de donnée.
    Sans être obligé de créer un trigger par base de donnée car la liste de base de donnée est variable.

    J'arrive à créer un trigger qui met à jour une et une seule autre base de donnée.
    J'arrive à créer une requète qui sélectionne les noms de toutes les base de données que je veux mettre à jour.
    Mais je n'arrive pas à fusionner les deux.

    Je travaille avec SQL Server 2000

    J'espère avoir été clair, je débute.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Lire les règles du forum avant de poster.
    Vous serez en mesure de fournir les informations necessaires à la resolution du problème.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    heureusement SQL Server respecte la norme sur le point que nous allons traiter ...

    1) utilise les vues d'info de schema pour trouver tes bases
    2) utilise les vues d'info de schema pour trouver tes tables

    Les vues d'info de schema :

    INFORMATION_SCHEMA.SCHEMATA => les bases
    INFORMATION_SCHEMA.TABLES => Les tables

    Plus de détail :
    http://sqlpro.developpez.com/SQL_AZ_7b.html#SCHEMA9

    utilise une notation pointée et u curseur pour parcourir les résultats et tout ira bien...

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

  4. #4
    mmn
    mmn est déconnecté
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Par défaut
    Merci, je vais essayer de voir avec ça.

    On m'a également envoyé cet 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
     
    create or replace trigger check_budget_EMP
       after insert or update of SAL, DEPTNO on EMP
       declare cursor DEPT_CUR is
       select DEPTNO, BUDGET 
          from DEPT; DNO DEPT.DEPTNO%TYPE; ALLSAL DEPT.BUDGET% TYPE; DEPT_SAL number;
       begin
          open DEPT CUR;
          loop
             fetch DEPT_CUR into DNO, ALLSAL;
             exit when DEPT_CUR%NOTFOUND;
             select sum(SAL) into DEPT_SAL from EMP
                where DEPTNO = DNO;
             if DEPT_SAL > ALLSAL then
                raise application error(-20325, 'Total of salaries in the department ' jj to char(DNO) jj ' exceeds budget');
             end if ;
          end loop;
          close DEPT_CUR;
       end;
    Si je m'en sors je fournirai le code trigger, pour que ça puisse resservir, sinon... Je vous soliciterai de nouveau :-)

  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
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Pour "apprendre" Transact SQL, voici un petit tutorial :

    http://sqlpro.developpez.com/Transac...ansactSQL.html

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

  6. #6
    mmn
    mmn est déconnecté
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 5
    Par défaut
    Bonjour,

    C'est bon, après pas mal de tatonnement, ça fontionne, je vous met le code, pour le cas ou vous en auriez besoin :

    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
     
    CREATE TRIGGER insert_xnetpage
    ON xnetpage
    FOR INSERT
    AS 
    	CREATE TABLE ##MyTempTable 
    		(
    		Id_xpg TINYINT,
     		page_xpg VARCHAR(100), 
    		remplace_xpg VARCHAR(100),
    		rubrique_xpg VARCHAR(50),
    		libelle_xpg VARCHAR(75),
    		Couleur_xpg VARCHAR(20)
    		)
     
    	INSERT INTO ##MyTempTable 
    		SELECT * FROM inserted
     
    	DECLARE xNetPage_Cur CURSOR
    		FOR (Select name from master.dbo.sysdatabases 
    				where sid <> 0x01
    				  and name not like 'utr_commun'
     				  and name not like 'news'
    				  and name not like 'CommunityStarterKit')
     
    	DECLARE @nomBase VARCHAR(100)
    	DECLARE @table   VARCHAR(200)
     
    	OPEN xNetPage_Cur
    	FETCH NEXT FROM xNetPage_Cur
    		INTO @nomBase
     
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
    		SET @table = @nomBase + '.dbo.xnetpage'
    		PRINT @table
    		EXECUTE (
    			 'INSERT ' + @table +
    			' SELECT ##MyTempTable.Id_xpg, 
    			##MyTempTable.page_xpg, 
    			##MyTempTable.remplace_xpg,
    			##MyTempTable.rubrique_xpg,
    			##MyTempTable.libelle_xpg,
    			##MyTempTable.Couleur_xpg
    		FROM ##MyTempTable
    		WHERE (##MyTempTable.Id_xpg = (SELECT Max (##MyTempTable.Id_xpg)
    						FROM ##MyTempTable))'
    			 )
    		FETCH NEXT FROM xNetPage_Cur
    			INTO @nomBase
    	END
    J'ai été oblige d'utiliser une table temporaire globale car j'avais une erreur quand j'utilisais la table inserter dans la commande EXECUTE.

    Merci pour tous.

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

Discussions similaires

  1. JButton qui met à jour un JLabel, possible ?
    Par nikwik dans le forum Débuter
    Réponses: 4
    Dernier message: 15/01/2011, 12h30
  2. Réponses: 0
    Dernier message: 18/08/2010, 20h01
  3. Macro qui met à jour un Workbook à partir d'un autre
    Par Sanny80 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/11/2009, 09h31
  4. Réponses: 2
    Dernier message: 11/08/2006, 11h11
  5. TRIGGER - mise a jour champ de la table declencheur
    Par jane_ng dans le forum Oracle
    Réponses: 1
    Dernier message: 17/06/2006, 19h12

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