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 incrémentation @@identity


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut Trigger incrémentation @@identity
    Bonjour à tous et merci d'avance pour vos réponses,

    j'ai les deux tables suivantes :
    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
     
    --------------- TABLES REFERENCES_CMD ---------------------------
     
    CREATE TABLE REFERENCES_CMD(
    reference_id INTEGER IDENTITY (1, 1) NOT NULL,
    designation VARCHAR(20) NOT NULL,
    lot_num VARCHAR(20) NULL,
     
    CONSTRAINT REFERENCES_CMD_reference_id_pk PRIMARY KEY (reference_id));
     
    -------------------- TABLES TESTS --------------------------------
    CREATE TABLE TESTS(
    test_id INTEGER IDENTITY (1, 1) NOT NULL,
    bioburden VARCHAR(20)  NULL,
    gravimetrie VARCHAR(20) NULL,
    sablage VARCHAR(20) NULL,
    sterilisation VARCHAR(20) NULL,
     
     
    CONSTRAINT TESTS_test_id_pk PRIMARY KEY (test_id),
    CONSTRAINT TESTS_reference_id_fk FOREIGN KEY (reference_id) REFERENCES REFERENCES_CMD (reference_id)
    );

    et j'ai le trigger suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE trigger autoincrement_TESTS
          on dbo.TESTS
        instead of insert
          as
         insert into TESTS (reference_id, bioburden, gravimetrie, sablage, sterilisation ) select @@identity, bioburden, gravimetrie, sablage, sterilisation from inserted
    mon problème est que le trigger insert une valeur nulle dans le champ "reference_id" au lieu de la valeur @@identity ce qui ne permet pas de lier les deux tables !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Ce comportement est totalement logique, tu essaies d'appeler une variable système qui n'est pas encore chargée. En effet, comme tu es dans un trigger INSTEAD OF ton insertion n'est pas réalisé donc la variable @@IDENTITY n'est pas chargée. Pour continuer tu essaies d'appeler une variable d'auto-incrément pour charger une colonne clé étrangère.

    Je pense que tu as un soucis de conception dans ce que tu souhaites faire.
    Soit plus explicite dans le comportement quue tu souhaites mettre en place. Pour l'instant, je ne comprend pas pourquoi tu utilises un trigger et la variable @@IDENTITY.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Merci pour votre réponse,

    je vais essayer d'être plus clair, mon but est de lier les deux tables REFERENCES_CMD et TESTS par le champ reference_id, qui est une clé primaire et un integer autoincrement dans la table REFERENCES_CMD, et bien sûr une clé étrangère dans la table TESTS dans laquelle je n'arrive pas à l'incrémenter à chaque nouvelle insertion dans cette même table.

    Peut être un problème de conception mais je vois pas une autre solution, si vous me proposez une je suis preneur.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Je pense que la méthode utilisée est très mauvaise.

    En effet, une clé étrangère sert à créer une relation entre deux tables.

    Par contre, si vote cardinalité est de la forme 1-1 (enregistrement de la table TESTS ne peut être lié qu'à un enregistrement de la table REFERENCES_CMD et inversement), il ne sert à rien d'avoir deux tables. Je vous conseillerai de fusionner vos tables.

    SI vous avez une cardinalité 1-*, il vous faut effectuer une recherche de l'id voulu dans la table REFERENCES_CMD afin de l'insérer dans la table TESTS.

    Je crois de plus en plus que vous devriez revoir votre MCD.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Par défaut
    Sincérement je débute en base de données et j'arrive pas à relier mes tables, la cardinalité est en effet de 1-*....mais je ne vois pas comment faire pour rechercher et inserer, pourriez vous me donner plus de détails ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    QUESTION:

    Lors de votre insertion, connaissez-vous la valeur de l'un des champs designation ou lot_num de votre table REFERENCE_CMD. Si oui, effectuer la recherche de reference_id par rapport à cette valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT reference_id FROM REFERENCE_CMD WHERE designation='maDesignation'
    De plus, quel est le type d'application que vous développez et quel est votre interface utilisateur.

Discussions similaires

  1. Trigger : incrémenter un champ selon un autre champ
    Par David55 dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/03/2011, 18h26
  2. Modifier Incrément IDENTITY
    Par zinzineti dans le forum Administration
    Réponses: 9
    Dernier message: 23/04/2010, 11h26
  3. Modifier Incrément IDENTITY
    Par zinzineti dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/04/2010, 11h21
  4. Trigger incrementation @@identity
    Par agur29 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/11/2007, 19h59
  5. [EJB2.1 Entity] [Débutant] Champs auto-incrémenté (identity)et EJB
    Par Houbbba dans le forum Java EE
    Réponses: 9
    Dernier message: 04/04/2006, 19h15

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