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 :

Affecter les données d'une table à une autre table


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Points : 54
    Points
    54
    Par défaut Affecter les données d'une table à une autre table
    Bonjour à tous,
    j'ai une table T1 qui contient le matricule,nom et prénoms puis une table T2 qui contient matricule et nom.
    J'aimerais savoir si j'insère dans ma table T1 (001,Koffi,Franck arthur),s'il est possible d'insérer les même valeur dans ma table T2(001, Koffi) en passant par un déclencheur.
    C'est à dire créer un déclencheur qui va insérer dans ma table T2 les même valeurs insérées dans ma table T1.
    Est-ce possible? si oui comment cela se passe? sinon est-ce qu'il y a une autre méthode?
    Merci pour votre aide

  2. #2
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour,
    Oui bien entedu cela est possible par un trigger du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create trigger tr_ins_t1 on T1
      after insert AS
    begin
      insert into t2(matricule, nom) select matricule, nom from inserted;
    end;
    Toutefois si la table T2 doit toujours contenir les même informations que la table t1, il est préférable de définir une vue ainsi les données ne sont pas dupliquées.

  3. #3
    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 : 42
    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,

    Tout dépend de ce que vous voulez faire.
    Si vous avez ou allez avoir un nombre important de procédures stockées qui vont insérer la table T1, il est plus simple d'attacher un trigger à la table T1, mais il ne faut pas oublier que l'exécution d'un trigger est gourmande en ressources.

    Cela donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TRIGGER TR_A_I_T1
    	ON T2
    AFTER INSERT
    AS
    BEGIN
    	INSERT INTO dbo.T2
    	(
    		matricule,
    		nom
    	)
    	SELECT matricule,
    			nom
    	FROM INSERTED
    END
    Si au contraire vous avez ou allez avoir une seule procédure stockée dédiée à cela, placez le code directement à la suite de l'insertion dans T1 :

    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
    CREATE PROCEDURE AjouteT1
    	@matricule INT,
    	@nom VARCHAR(20),
    	@prenom VARCHAR(20)
    AS
    BEGIN
    	BEGIN TRY
    		INSERT INTO dbo.T1
    		(
    			matricule,
    			nom,
    			prenom
    		)
    		VALUES
    		(
    			@matricule,
    			@nom,
    			@prenom
    		)
     
    		INSERT INTO dbo.T2
    		(
    			matricule,
    			nom
    		)
    		VALUES
    		(
    			@matricule,
    			@nom
    		)
    	END TRY
    	BEGIN CATCH
    		RAISERROR('Erreur ...', 16, 1)
    		ROLLBACK
    	END CATCH
    END
    Si enfin vous avez un faible nombre de procédures stockées qui devront insérer dans T1, vous pouvez écrire :

    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
    CREATE PROCEDURE copieT1DansT2
    	@matricule,
    	@nom
    AS
    BEGIN
    	INSERT INTO T2
    	(
    		matricule,
    		nom
    	)
    	VALUES
    	(
    		@matricule,
    		@nom
    	)
    END
    Et la procédure AjouteT1 devient alors :

    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
    CREATE PROCEDURE AjouteT1
    	@matricule INT,
    	@nom VARCHAR(20),
    	@prenom VARCHAR(20)
    AS
    BEGIN
    	BEGIN TRY
    		INSERT INTO T1
    		(
    			matricule,
    			nom,
    			prenom
    		)
    		VALUES
    		(
    			@matricule,
    			@nom,
    			@prenom
    		)
     
    		EXEC dbo.copieT1DansT2 @matricule, @nom
    	END TRY
    	BEGIN CATCH
    		RAISERROR('Erreur ...', 16, 1)
    		ROLLBACK
    	END CATCH
    END
    Mais pourquoi souhaitez-vous dupliquer des données ?

    @++

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre aide jero44 et elssuket je l'ai essaié et cela a marché.
    Mais notre chef de projet m'a signalé que ce n'est pas cette methode que je dois utiliser. Au fait je developpe une mini application pour mon projet de fin d'année en delphi et sql server 2005
    Je dois réaliser cet tableau(sur un écran et non un etat) dans mon application
    Matière Note 1 Note2 Note 3 Note 4 Note 5 Note 6
    Anglais
    Physique
    Math
    Droit
    communication

    et pour ce faire j'ai crée un table matière qui contient IdMat, DescMat
    puis une table note étudiant qui contient IdBul,IdMat,IdEtudiant,Note1,Note2,Note3,Note4,Note5,MoyEtud
    Etant donnée que je n'arrivais pas à réaliser ce tableau directement dans delphi
    j'ai crée une table Bmatière qui contient IdMat,Note1,Note2,Note3,Note4,Note5 afin de pouvoir réaliser mon tableau
    Voilà ou je voilais parvenir mais mon chef de projet m'a interdit d'utiliser cette methode
    Ben bon je continu de chercher merci pour vos différentes réponse.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre aide jero44 et elssuket je l'ai essaié et cela a marché.
    Mais notre chef de projet m'a signalé que ce n'est pas cette methode que je dois utiliser. Au fait je developpe une mini application pour mon projet de fin d'année en delphi et sql server 2005
    Je dois réaliser cet tableau(sur un écran et non un etat) dans mon application
    Matière Note 1 Note2 Note 3 Note 4 Note 5 Note 6
    Anglais
    Physique
    Math
    Droit
    communication

    et pour ce faire j'ai crée un table matière qui contient IdMat, DescMat
    puis une table note étudiant qui contient IdBul,IdMat,IdEtudiant,Note1,Note2,Note3,Note4,Note5,MoyEtud
    Etant donnée que je n'arrivais pas à réaliser ce tableau directement dans delphi
    j'ai crée une table Bmatière qui contient IdMat,Note1,Note2,Note3,Note4,Note5 afin de pouvoir réaliser mon tableau
    Voilà ou je voilais parvenir mais mon chef de projet m'a interdit d'utiliser cette methode
    Ben bon je continu de chercher merci pour vos différentes réponse.

  6. #6
    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 : 42
    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
    Mais notre chef de projet m'a signalé que ce n'est pas cette methode que je dois utiliser
    Hé bien avant de dire que ce n'est pas cette méthode qu'il faut utiliser, il faudrait qu'il regarde le modèle de données qu'il vous propose ...

    Je dois réaliser cet tableau(sur un écran et non un etat) dans mon application
    Matière Note 1 Note2 Note 3 Note 4 Note 5 Note 6
    Anglais
    Physique
    Math
    Droit
    communication
    Il s'agit là de cosmétique pure, à vous d'implémenter cela en Delphi.

    Pourquoi ne pas faire une table etudiant, une table matiere, et une table note, et une table noteMatiereEtudiant.
    En ce sens vous n'avez pas besoin de savoir combien de notes un étudiant a eu. Si un professeur offre à l'étudiant la possibilité de repasser un examen, vous allez devoir modifier votre modèle de données.
    Que se passe-t-il si un étudiant n'est pas inscrit à une matière ?
    Dans votre modèle toutes les matières ont le même nombre de notes, or il n'est pas obligatoire que toutes les matières et le même nombre d'examens, et que tous les étudiants y participent ...

    @++

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

Discussions similaires

  1. [Débutant] Utiliser les données d'un script à une autre
    Par babboum dans le forum C#
    Réponses: 2
    Dernier message: 21/06/2014, 12h57
  2. [AC-2007] enregistrer les données sur état dans une table
    Par ouahab dans le forum Access
    Réponses: 1
    Dernier message: 14/05/2012, 15h12
  3. Réponses: 2
    Dernier message: 21/08/2009, 13h41
  4. [MySQL] insérer sans écraser les données déjà existantes d'une table
    Par brajae85 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 12/05/2008, 11h33
  5. language SQL - Copier une ligne dans autre table
    Par fxd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/10/2005, 18h16

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