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 :

Rendre Auto increment une clée primaire / visual web studio et sql server


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Par défaut Rendre Auto increment une clée primaire / visual web studio et sql server
    Bonjour,

    Je développe sous Visual Web Developper une appli web liée à une base SQL server.
    J'aimerais rendre chacun de mes champs ID auto incrémentable. Pour celà j'ai repéré l'attribut "Identity" mais je n'arrive pas à le mettre à "Oui".
    Chacune de mes versions sont 2008 express (budget oblige).
    Dans les propriétés de mes champs j'ai "Spécification du compteur : Non" et aucun moyen de le passer à "Oui".
    Bref si quelqu'un comprend mon charabiat et aurait une solution, merci!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Par défaut
    Bref,
    En recherchant un peu partout :
    uniqueidentifier ne peut pas s'auto incrémenter sous sql server. Il faut choisir un type INT et là choisir compteur "identity"...
    Donc,
    Avec toutes les clées étrangères créées, j'en ai pour l'après midi...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Par défaut
    Dernier point, j'ai un message d'erreur qui me dis que le server distant ne gère pas la transformation de "uniqueidentifier" vers "int"...
    Aucune donnée n'a été ajoutée à ma base...
    Il n'y aurait pas une solution pour feinter ?

  4. #4
    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 : 43
    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
    Par défaut
    Bonjour,

    Vous avez tenté de convertir une colonne dont le type est UNIQUEIDENTIFIER en type INT, ce qui est impossible.

    Il vous faut :

    - ajouter la colonne de type INT sans la propriété IDENTITY,
    - faire la mise à jour de cette colonne pour les contraintes de clé étrangères à partir de la colonne UNIQUEIDENTIFIER,
    - supprimer la colonne UNIQUEIDENTIFIER.

    Voici ce que cela donne avec seulement deux tables :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    SET NOCOUNT ON
    GO
     
    CREATE TABLE TbClient
    (
    	IDClient UNIQUEIDENTIFIER NOT NULL CONSTRAINT PK_TbClient PRIMARY KEY,
    	nomClient VARCHAR(20)
    )
    GO
     
    ALTER TABLE dbo.TbClient
    ADD CONSTRAINT DF_TbClient_IDClient DEFAULT (NEWID()) FOR IDClient
    GO
     
    INSERT INTO dbo.TbClient (nomClient) VALUES ('Client1')
    INSERT INTO dbo.TbClient (nomClient) VALUES ('Client2')
    INSERT INTO dbo.TbClient (nomClient) VALUES ('Client3')
    GO
     
    CREATE TABLE TbAdresseClient
    (
    	IDAdresseClient UNIQUEIDENTIFIER NOT NULL CONSTRAINT PK_TbAdresseClient PRIMARY KEY,
    	IDClient UNIQUEIDENTIFIER NOT NULL CONSTRAINT FK_TbAdresseClient_IDClient FOREIGN KEY (IDClient) REFERENCES TbClient,
    	adresseClient VARCHAR(100) NOT NULL
    )
    GO
     
    ALTER TABLE dbo.TbAdresseClient
    ADD CONSTRAINT DF_TbAdresseClient_IDAdresseClient DEFAULT (NEWID()) FOR IDAdresseClient
    GO
     
    SELECT * FROM TbClient
    SELECT * FROM TbAdresseClient
    GO
     
    -- Récupération des identifants client pour fabriquer les 3 instructions INSERT suivantes :
    INSERT INTO dbo.TbAdresseClient (IDClient, adresseClient) VALUES ('A55C73C8-FA39-46A0-9CAF-0C8CAD8B1773', '2 rue du Yaourt')
    INSERT INTO dbo.TbAdresseClient (IDClient, adresseClient) VALUES ('0B902A06-6C49-445C-9CBD-71D064BEE184', '3 rue du Yaourt')
    INSERT INTO dbo.TbAdresseClient (IDClient, adresseClient) VALUES ('92248DC4-430F-44F6-9C59-8F78CFAFB4C7', '4 rue du Yaourt')
    GO
     
     
    -- Ajout de la colonne INT avec la propriété IDENTITY
    ALTER TABLE dbo.TbClient
    ADD IDClient_2 INT NOT NULL IDENTITY
    GO
     
    ALTER TABLE dbo.TbAdresseClient
    ADD IDClient_2 INT NULL
    GO
     
    -- Mise à jour pour l'application de la contrainte de clé étrangère
    UPDATE dbo.TbAdresseClient
    SET IDClient_2 = C.IDClient_2
    FROM dbo.TbAdresseClient AC
    JOIN dbo.TbClient C ON C.IDClient = AC.IDClient
    GO
     
    -- Suppression de la contrainte de clé étrangère FK_TbAdresseClient_IDClient
    ALTER TABLE TbAdresseClient
    DROP CONSTRAINT FK_TbAdresseClient_IDClient
    GO
     
    -- Suppression de la colonne de type UNIQUEIDENTIFIER dans TbAdresseClient
    ALTER TABLE TbAdresseClient
    DROP COLUMN IDClient
    GO
     
    -- Suppression de la clé primaire de TbClient
    ALTER TABLE TbClient
    DROP CONSTRAINT PK_TbClient
    GO
     
    -- Ajout de la nouvelle contrainte de clé primaire à TbClient
    ALTER TABLE TbClient
    ADD CONSTRAINT PK_TbClient PRIMARY KEY (IDClient_2)
    GO
     
    -- Supression de la colonne IDClient de type UNIQUEIDENTIFIER dans TbClient
    ALTER TABLE TbClient
    DROP COLUMN IDClient
    GO
     
    -- Ajout de la contrainte de clé étrangère dans la table TbAdresseClient
    ALTER TABLE TbAdresseClient
    ADD CONSTRAINT FK_TbAdresseClient_IDClient FOREIGN KEY (IDClient_2) REFERENCES TbClient
    GO
    Il est fortement conseillé d'utiliser des colonnes de type entier comme clé primaire.
    Vous devrez donc tout scripter et tester avant de faire cela en production, et très probablement couper tous les accès à la base de données en priant pour que le script ne plante pas ...

    Vous avez une autre solution : l'utilisation des fonctions NEWID() et NEWSEQUENTIALID() ...

    @++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Par défaut
    Travail laborieux effectué...
    Si j'avais su avant!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. oracle9i:Auto incrementer une clé primaire
    Par oasma dans le forum Oracle
    Réponses: 4
    Dernier message: 23/03/2007, 15h27
  2. Auto-increment et cles etrangeres sur diferents sgdb.
    Par jota5450 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 26/09/2006, 11h57
  3. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  4. comment supprimer une clé primaire d'une table ?
    Par polianita dans le forum Access
    Réponses: 10
    Dernier message: 03/08/2006, 15h34
  5. Réponses: 8
    Dernier message: 26/09/2005, 22h06

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