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

Administration SQL Server Discussion :

Ajouter une nouvelle clé primaire en auto incrément [2008R2]


Sujet :

Administration SQL Server

  1. #1
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut Ajouter une nouvelle clé primaire en auto incrément
    Bonjour,

    Actuellement j'ai une table avec une clé primaire standard: PersonID INT NOT NULL PRIMARY KEY

    Le numéro était généré via une autre application, aujourd’hui l'application à été mis à jour et depuis, cette génération à recommencer à 1....Du coup vous voyez mon soucis...

    La solution serait de modifier cette clé primaire, faire qu'elle fasse de l'auto-incrément et commencer, non pas depuis 1, mais depuis une valeur exemple de 524'415

    Est-ce possible de faire cela?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    oui c'est possible.
    Avec cette fonctionnalité par exemple : https://msdn.microsoft.com/en-us/lib...or=-2147217396
    ou sur la séquence suivant votre version qui n'est pas précisée.

  3. #3
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    La version est SQL 2008 R2

    Mais avec cette fonction, je peux, sur le même champs, pas touché aux numéros déjà existant, et commencer à un instant T, un nouvel incrément sur le même champ?

    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    Partant d'une table T ayant une colonne C qui est la clef primaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE T (C INT CONSTRAINT PK PRIMARY KEY)
    et contenant en dernier auto incrément, la valeur 524415, le script de modification est alors le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ALTER TABLE T ADD C2 INT IDENTITY(524415, 1);
     
    ALTER TABLE T DROP CONSTRAINT PK;
     
    ALTER TABLE T DROP COLUMN C;
     
    EXEC sp_rename 'T.C2', 'C', 'COLUMN';
     
    ALTER TABLE T ADD CONSTRAINT PK PRIMARY KEY (C);
    Si vous avez des FK, il faudra d'abord les scripter, les supprimer avant de jouer le script ci dessus, puis les recréer.

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

  6. #6
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Avec votre technique je vais perdre mes anciennes valeurs contenu dans la colonne C, ce que je ne veux pas (et ne peux pas, elles sont utilisés ailleurs).

    Je me ré-explique:

    Actuellement j'ai une table avec un champ C, qui n'a actuellement pas d’auto-incrément et les valeurs ne se suivent pas forcément (les numéros proviennent d'une application externe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C INT NOT NULL CONSTRAINT PK PRIMARY KEY
    Exemple de données de la colonne C:

    Suite à un changement dans l'application, je ne peux plus utiliser ce numéro comme ID dans ma table.

    J'aimerais donc convertir ce champ pour lui ajouter de l'auto-incrément dessus, en partant d'un dernier numéro connu, ici le 117, on devra donc partir de 118.

    Au final ma nouvelle ligne devra contenir le numéro 118 dans la colonne C, qui sera un auto-incrément de Sql Server, et non plus un numéro qui provient de l'application externe.

    Est-ce possible de faire cela?

    Merci d'avance

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    Vous ne pouvez pas ajouter la propriété IDENTITY à une colonne existante ni faire un UPDATE de la colonne IDENTITY.

    Pour cela il faut externaliser les données puis les recharger.

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

  8. #8
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Je dois dans tout les cas refaire un nouveau champs?

    Citation Envoyé par SQLpro Voir le message
    Pour cela il faut externaliser les données puis les recharger.
    C'est à dire? Je ne peux pas recharger des données dans une colonne qui contient un auto-incrément, si?

    Merci

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    C'est à dire? Je ne peux pas recharger des données dans une colonne qui contient un auto-incrément, si?

    Merci
    Non. Les colonnes IDENTITY ne sont pas "misajourbale" (UPDATable) par sécurité. Le seul moyen de forcer une valeur, est au moment de l'insertion.

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

  10. #10
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Il existe une manière simple de le faire, c'est d'utiliser SQL Server Management Studio. Clic droit sur la table, en mode création, il faut sélectionner la colonne concerner et passer la propriété "spécification de compteur" sur "Oui".

    SSMS procède par une recréation de table et importation des données pour arriver à ce résultat. A noter qu'il faut qu'une option soit décochée. Dans Outils / Options / Concepteurs, il faut que la case "Empêcher l'enregistrement de modifications qui nécessitent une récréation de la table" soit décochée. Par défaut, elle est cochée.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  11. #11
    Membre habitué
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Excellent, c'est exactement ce que je chercherais à faire, et cela fonctionne.

    Et merci pour l'option de la case à coché, je me posais la question pourquoi à chaque fois je ne pouvais rien modifier...

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/03/2014, 16h56
  2. Réponses: 1
    Dernier message: 12/05/2009, 11h05
  3. [VS2005] Comment ajouter une nouvelle tache ?
    Par scifire dans le forum Visual Studio
    Réponses: 2
    Dernier message: 18/08/2006, 16h13
  4. Une commande qui récupère l'auto incrément?
    Par ndsaerith dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 28/07/2006, 16h04
  5. Réponses: 2
    Dernier message: 06/07/2006, 13h09

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