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 :

insertion en héritage avec exclusion mutuelle


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut insertion en héritage avec exclusion mutuelle
    Bonjour,

    J'ai un héritage avec exclusion mutuelle dans mon modèle.
    La table mère:
    Les deux tables filles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CLIENT_EXTERNE (id_client,..autres champs)
    CLIENT_INETRNE (id_client,..autres champs)
    Quelle est la bonne manière d'insertion dans ces tables, sachant que je veux id_client soit automatiquement incrémenté.

    Par avance, merci de votre aide !

  2. #2
    Membre à l'essai
    Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    salut Kifache,
    Je serais toi je mettrais id_client de ma table client en auto incrementable et j'ajouterais un champ du style tinyint qui ne servrait qu'à faire des insertion pour incrémenter mon id car sinon on doit ecrire "insert into client " et ça ne marche pas alors que si on ajoute le champ "inutile" on ecrit insert into client (inutile) values (1) là ça marche ton id client s'incremente.
    ensuite pour recupérer cet id et l'integrer dans tes autres tables tu utilises @@identity comme suit: insert into client_externe (client_id, champ2 etc...) values (@@identity,'toto' etc..) ce qui donne au final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    into client (inutile) values (1)
    insert into client_externe (client_id, champ2 etc...) values (@@identity,'toto' etc..)
    insert into client_interne (client_id, champ2 etc...) values (@@identity,'toto' etc..)
    voilà j'espere que ça te convient

  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,

    Vous devez effectivement comme vous l'a conseillé loutheo ajouter la propriété d'auto-incrément à la colonne IDClient de la table client : si ne ce n'est pas déjà fait, ce n'est possible que sous Management Studio, en choisissant dans le clic-droit sur la table "Modifier" ou "Création" puis en vous rendant dans la partie inférieure de la fenêtre, dans "spécification du compteur".

    Ensuite vous pouvez insérer vos clients dans la table Client directement, et vous devrez créer un trigger qui fasse l'insertion dans vos tables filles. Vous ne pourrez spécifier ce trigger que si votre table Client comporte une colonne de type BIT, avec par exemple 1 pour un client interne, et 0 pour un client externe.

    Pour réaliser cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALER TABLE Client
    ADD isClientInterne BIT NOT NULL CONSTRAINT DF_Client_isClientInterne DEFAULT 1
    Ainsi vous pourrez écrire votre trigger comme suit :

    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 TRIGGER TR_A_I_Client
    	ON Client
    	AFTER INSERT
    AS
    BEGIN
    	INSERT INTO dbo.ClientInterne
    	SELECT IDClient, autresColonnes
    	FROM INSERTED
    	WHERE isClientInterne = 1
     
    	INSERT INTO dbo.ClientExterne
    	SELECT IDClient, autresColonnes
    	FROM INSERTED
    	WHERE isClientInterne = 0
    END
    Pour aller plus loin, vous pouvez regarder cet article de SQLPro

    @++

Discussions similaires

  1. Utiliser un héritage avec exclusion mutuelle correctement
    Par akecoocoo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 20/11/2005, 22h54
  2. Insertion de noNamespaceSchemaLocation avec XSLT
    Par sapjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/10/2004, 16h48
  3. Insertion de données avec Posgretsql
    Par djibril dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/05/2004, 11h23
  4. Réponses: 2
    Dernier message: 14/05/2004, 14h32
  5. insertion des blob avec LOAD DATA...
    Par orli1x51 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/10/2003, 18h05

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