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 :

Activer l'auto-incrémentation dans un champ après import de Access vers MSSQL


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Activer l'auto-incrémentation dans un champ après import de Access vers MSSQL
    Bonjour,

    Je suis en train de migrer des tables Access (2007) vers MS SQL SERVER qui me prend un temps fou rien que pour une seule table, où j'ai des champs qui sont supposés interdire la valeur NULL, pourtant, elle est déjà présente, les champs ayant la valeur NULL et qui sont indexés, et même des problèmes sur des champs Date avec la valeur 01/01/1013 que je devais ensuite corriger pour mettre 01/01/2013

    Mon soucis est au sujet d'une table ayant un champ de type NuméroAuto (dans Access) que j'ai ensuite remplacé par Numérique. Là, j'ai finalement réussi à la migrer entièrement et j'aimerai dans MS SQL SERVER pouvoir activer l'auto-incrémentation sur ce champ, comment feriez-vous?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Sous SQL Server, il existe la propriété IDENTITYpour une colonne. Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE dbo.Employe 
    ( 
     Id int IDENTITY(1,1), 
     Nom varchar (50), 
     .... etc. 
    );
    Il se trouve que pour une table déjà existante (exemple dbo.MaTable), il n'est pas possible d'ajouter, à posteriori donc, la propriété IDENTITY.

    Pour palier à cette limitation, une des techniques (il y en a bien d'autres) consiste à procéder comme suit :

    1 - Créez une nouvelle table (Exemple MaTableCopie) ayant la même structure mais où la colonne concernée sera dotée de la propriété identité (IDENTITY)
    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE dbo.MaTableCopie 
    ( 
     Id int IDENTITY(1,1), 
     Nom varchar (50), 
     .... etc. 
    );
    PS : N'oublier la clé primaire !

    2 - Activez pour la nouvelle table (MaTableCopie) la possibilité d'insérer dans la colonne IDENTITY
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SET IDENTITY_INSERT dbo.MaTableCopie ON
    3 - Copiez les données depuis la table source (Matable) vers la nouvelle table (MatableCopie)
    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO dbo.MaTableCopie (Id, Nom, .... )
    SELECT Id, Nom, ... 
    FROM dbo.MaTable;
    4 - Désactivez pour la nouvelle table (MaTableCopie) la possibilité d'insérer dans la colonne IDENTITY
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SET IDENTITY_INSERT dbo.MaTableCopie OFF;
    5 - Vérifiez que la nouvelle table dbo.MaTableCopie contient bien toutes les données escomptées, puis droper l'ancienne table, c.à.d droper la table source dbo.MaTable)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP TABLE dbo.MaTable;
    6 - Renommez la nouvelle table dbo.MaTableCopie par l'ancien nom (celui de la table source que vous venez de dropper)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC sp_rename 'dbo.MaTableCopie', 'MaTable';
    NB : ne rajoutez pas le 'dbo.' dans le deuxième paramètre 'MaTable'

    Et c'est tout !

    Remarque :
    Vous pouvez aussi, très simplement, réaliser cette transformation par SSMS :
    Sous SSMS, en "mode Création" de la table dbo.MaTable, sélectionnez la colonne concernée, puis dans le panneau des propriétés de la dite colonne, sélectionnez le groupe "Spécification du compteur" puis modifier la valeur de la propriété "(Est d'identité)" à "Oui" puis enfin enregistrer les modifications ! et c'est tout ! SSMS s'occupera d'effectuer toutes les modification nécessaires !
    Personnellement je préfère les scripts que rédige moi-même en toute maîtrise.

    A+

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/04/2010, 15h53
  2. Création d'un champ "auto-incrémenté" dans une vue
    Par damnn dans le forum Développement
    Réponses: 8
    Dernier message: 20/10/2009, 14h50
  3. Comment obtenir un champs auto incrémenté dans une table DBase IV ?
    Par souminet dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/12/2007, 13h55
  4. Champs virtuel auto incrémenté dans une vue
    Par berceker united dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/06/2006, 14h33
  5. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 11h53

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