Hello,

Je viens vous voir car je cherche une solution de contournement pour un problème qui n'en serait pas un si notre maison-mère consentait à migrer à la version suivante de sql server...

Bref, dans une nouvelle DB, j'aurais bien voulu créer la table suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
CREATE TABLE S_GM.T_CARD_CRD (
    CRD_ID    INT    IDENTITY(1,1) NOT NULL,
    EMP_ID    INT    NOT NULL,
    CRD_NUMBER    INT IDENTITY(1,1) NOT NULL,
    CRD_LOCKED BIT NOT NULL DEFAULT CAST(0 AS BIT),
    CONSTRAINT PK_T_CARD_CRD PRIMARY KEY CLUSTERED (
        CRD_ID
    ) WITH (FILLFACTOR = 80)
);
GO
Évidemment, pas moyen vu qu'on ne peut avoir qu'une seule colonne IDENTITY par table (sinon, @@IDENTITY serait bien emmerdé pour nous retourner quelque chose ^^).
Avec 2012+, il y a les séquences pour me dépanner. Mais ça n'existe pas encore chez moi (la migration est prévue cependant... faut juste que je trouve le temps de la faire...)

Quelqu'un aurait-il une idée lumineuse pour contourner cette limitation "proprement" ?

J'ai bien pensé à faire ceci mais j'ai l'impression que ça fait bricolage...
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
CREATE TABLE S_GM.T_CARD_CRD (
    CRD_ID    INT    IDENTITY(1,1) NOT NULL,
    EMP_ID    INT    NOT NULL,
    CRD_LOCKED BIT NOT NULL DEFAULT CAST(0 AS BIT),
    CONSTRAINT PK_T_CARD_CRD PRIMARY KEY CLUSTERED (
        CRD_ID
    ) WITH (FILLFACTOR = 80)
);
GO
 
CREATE TABLE S_GM.T_CARD_NUMBER_CRN(
    CRD_ID    INT NOT NULL REFERENCES S_GM.T_CARD_CRD(CRD_ID),
    CRD_NUMBER INT IDENTITY(1,1) NOT NULL,
    CONSTRAINT PK_T_CARD_NUMBER_CRN PRIMARY KEY CLUSTERED(
        CRD_ID
    ) WITH (FILLFACTOR = 80)
);
GO
Je pourrais aussi utiliser la colonne CRD_NUMBER comme clef primaire et carrément retirer la colonne CRD_ID mais je ne respecterais alors plus le principe de Tabourier (vous allez me dire, c'est un principe, pas une règle absolue...).

Bref, quelle est la meilleure solution selon vous ? (ceux qui me diront de migrer vers une version 2012+ auront raison mais il me faut du temps )