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

MS SQL Server Discussion :

[MsSQL2K5] Second champs autoincrémenté dans une table


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut [MsSQL2K5] Second champs autoincrémenté dans une table
    Bonjour,

    Je suis en train de chercher une solution qui me permettrai de rendre indépendant l'identification d'un bon papier de son identification informatique dans la base de donnée.

    Je voulais savoir si il est possible de créer un deuxième champs autoincrémenté dans une table. Mon objectif est de pouvoir numéroté mes bons et de réinitialiser cette numérotation tous les ans sans toucher à la clé primaire de ma table qui elle continuerai son incrémentation normallement.

    ++

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 992
    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 : 21 992
    Billets dans le blog
    6
    Par défaut
    Je voulais savoir si il est possible de créer un deuxième champs autoincrémenté dans une table.
    Non.

    Mon objectif est de pouvoir numéroté mes bons et de réinitialiser cette numérotation tous les ans sans toucher à la clé primaire de ma table qui elle continuerai son incrémentation normallement.
    Vous pouvez faire cela dans une vue. C'est à cela que servent les vues ! Sinon vous aller faire de la redondance...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE T_BON 
    (BON_ID      INTEGER NOT NULL IDENTITY PRIMARY KEY,
     BON_DATE    DATETIME)
     
    INSERT INTO T_BON VALUES ('20051118')
    INSERT INTO T_BON VALUES ('20051230')
    INSERT INTO T_BON VALUES ('20051231')
    INSERT INTO T_BON VALUES ('20060102')
    INSERT INTO T_BON VALUES ('20060112')
    INSERT INTO T_BON VALUES ('20060220')
    INSERT INTO T_BON VALUES ('20060606')
    INSERT INTO T_BON VALUES ('20060817')
    INSERT INTO T_BON VALUES ('20070103')
    la requête suivant vous donne l'effet escompté !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT BOUT.*, 
           BON_ID - (SELECT MIN(BON_ID)
                     FROM   T_BON
                     WHERE  BON_DATE = (SELECT MIN(BON_DATE)
                                        FROM   T_BON
                                        WHERE  YEAR(BON_DATE) 
                                            >= YEAR(BOUT.BON_DATE))) + 1 AS BON_NUM
    FROM   T_BON AS BOUT
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BON_ID      BON_DATE                                               BON_NUM     
    ----------- ------------------------------------------------------ ----------- 
    1           2005-11-18 00:00:00.000                                1
    2           2005-12-30 00:00:00.000                                2
    3           2005-12-31 00:00:00.000                                3
    4           2006-01-02 00:00:00.000                                1
    5           2006-01-12 00:00:00.000                                2
    6           2006-02-20 00:00:00.000                                3
    7           2006-06-06 00:00:00.000                                4
    8           2006-08-17 00:00:00.000                                5
    9           2007-01-03 00:00:00.000                                1
    Dès lors vous pouvez transformer ce SELECT en vue et n'utiliser jamais que cette vue dans vos applications.

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

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut
    bonjour,

    et merci pour ta réponse

    Vous pouvez faire cela dans une vue
    Les vues correspondent bien à une "table" contenant le résultat d'une requête?

    J'avoue honnêtement ne pas comprendre la requête.

    C'est surtout l'élément de table BOUT qui me bloque dans la compréhension de cette requête. Je ne comprend pas trop à quelle élément il fait référence.

    Peux-tu m'en dire plus sur cette élément BOUT ?

    merci d'avance

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 992
    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 : 21 992
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    FROM   T_BON AS BOUT
    c'est le surnom, l'alias donné à la table externe (out) pour la distinguer de la table interne présente dans la sous requête. Cela permet de corréler les deux requêtes.

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

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut
    Bonjour,

    et merci pour ta réponse.

    S'agit-il d'une copie de la table T_BON le temps de la requête pour faire le tri?

    encore merci

    ++

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 992
    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 : 21 992
    Billets dans le blog
    6
    Par défaut
    Aucune idée. C'est le rôle de l'optimiseur SQL de choisir la stratégie optimale (d'où son nom) pour résoudre ce problème.

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

Discussions similaires

  1. Champ dynamique dans une table
    Par stef_078 dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 18h09
  2. Test evenement sur champ vide dans une table
    Par eddyG dans le forum Access
    Réponses: 3
    Dernier message: 30/05/2006, 17h02
  3. Réponses: 2
    Dernier message: 04/05/2006, 11h34
  4. Créer un champ calculé dans une table
    Par tigevellou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/04/2006, 15h08
  5. Tous les champs SAUF dans une table.
    Par Yepazix dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/08/2005, 16h01

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