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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    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 averti
    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
    Points : 406
    Points
    406
    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.
    Bon courage pour la suite.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    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 averti
    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
    Points : 406
    Points
    406
    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.
    Bon courage pour la suite.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    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 averti
    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
    Points : 406
    Points
    406
    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.
    Bon courage pour la suite.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Mon interface est en PHP, et cette même interface ne me permet pas de fusionner les deux tables.

    Par contre le lien entre les deux tables j'arrive pas à le faire ?? je suis sûr que c'est pas compliqué, depuis hier je cherche sur le internet la solution ou un exemple pour s'inspirer, mais rien !

    je vous serai bien reconnaissant si vous me donnez une piste !

  8. #8
    Membre averti
    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
    Points : 406
    Points
    406
    Par défaut
    Ton problème ne provient pas de SQL mais de la conception de ta page WEB.

    Petit conseil :
    Créer une liste de sélection avec les désignations de ta table REFERENCE_CMD. Avec une value égal au référence_id.
    L'utilisateur sélectionne sa désignation, toi tu récupères l'id à la validation du formulaire. Comme cela tu à toutes les informations nécessaires à ton INSERT.

    Je pense que tu devrais mettre un post sur le forum PHP et le forum WEB.
    Je pense qu'il faudrait que tu prennes le temps de bien analyser ce que tu souhaites faire dans ton application. De décrire tes comportements et ensuite de commencer à coder.

    La période d'analyse est très importante car elle t'évite d'effectuer des développements inutiles et incongrus.
    Bon courage pour la suite.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 28
    Points
    28
    Par défaut
    Ok merci bien Madinico,

    je vais voir ça et je vous tiens au courant

    merci encore pour vos éclaircissements

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