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 :

Identity Insert & auto_increment


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Par défaut Identity Insert & auto_increment
    Bonjour à tous,

    Je vous expose mon problème :

    J'ai une base de données SQL Serveur qui contient des tables dont les index sont en auto_increment.
    Pour le fonctionnement normal de mon application, c'est parfait.

    Ce n'est pas le cas pour mon script.vbs de peuplement inital de ma BD qui va chercher des données depuis diverses sources, dont une autre base de donnée où je récupère des tables avec leurs index déjà existant que je souhaite conserver, je dois donc pouvoir insérer des clés primaires dans une table dont la clé primaire est en auto_increment.

    Donc avant de lancer mon script d'importation, je modifie la propriété "Compteur" de mes tables par l'interface graphique (SQL Server Entreprise Manager) :



    Et une fois mon script de peuplement terminé, je repositionne la propriété Compteur à "oui".

    Cette solution manuelle fonctionne, mais me fait perdre pas mal de temps, car mon appli étant en cours de développement je relance régulièrement mon script de peuplement, et je dois faire cette manip pour 11 tables.

    J'ai donc cherché une première solution :
    SET INDENTITY INSERT ma_table OFF/ON
    Que je n'ai pas réussi à mettre en oeuvre car cette commande se solde à chaque fois par un "Le type ne correspond pas" de la part du serveur MSSQL sans plus de précision.

    Je me suis ensuite penché sur un éventuel ALTER TABLE ma_table .... qui supprimerait la propriété auto_increment de mon index, mais sans succès également.

    J'ai recherché sur Internet une solution à ce problème, et je n'ai pas trouvé.

    Je m'adresse donc à vous, pour m'aider à trouver la commande magique en SQL qui me permettra d'insérer des index dans mes tables sans avoir à modifier mes 11 tables avant ET après chaque peuplement.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Par défaut
    Essaie ceci :

    SET IDENTITY_INSERT t1 ON
    INSERT INTO t1 (ID, col,...)
    SELECT ID, col,...
    FROM t2

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Faites vos insertions de données importées à l'aide de la commande TRANSACT SQL BULK INSERT avec l'option KEEP IDENTITY.

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

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Par défaut
    J'ai finalement réussi à mettre en oeuvre la solution du SET IDENTITY_INSERT ma_table ON grâce à un message d'erreur un peu plus explicite obtenu dans l'analyseur de requetes :
    "An explicit value for the identity column in table 'ma_table' can only be specified when a column list is used and IDENTITY_INSERT is ON."

    J'ai donc modifié mes requètes pour y spécifier les colonnes dans lesquelles j'insère mes données et ça passe.

    Merci

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

Discussions similaires

  1. Insertion impossible car identity insert défini à off
    Par dubidon dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/06/2007, 15h34
  2. INSERT, fonction MAX, et auto_increment
    Par freesurfer dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/04/2006, 18h29
  3. Récupération de l'auto_increment dans l'insert en cours
    Par ultraboa dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 07/03/2006, 13h19
  4. Réponses: 9
    Dernier message: 07/09/2004, 11h12
  5. Insert ds une column identity
    Par Trahwn dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 06/10/2003, 15h14

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