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 :

Reseed et INSERT


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 38
    Par défaut Reseed et INSERT
    Bonjour

    J'ai une table très simple que j'ai fait pour des test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE [dbo].[TestInsert](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[SomeData] [nchar](10) NULL,
     CONSTRAINT [PK_TestInsert] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    J'ai ajouté un paquet de données dans la table pour tester et ensuite j'ai procédé à des suppressions aléatoires afin de garder certaines lignes. Ensuite, j'ai rouler la commande reseed afin de repartir à 1.

    J'ai créer ensuite une storedproc qui va faire des insert dans la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO TestInsert
                          (SomeData)
    VALUES     (N'TOTO')
    J'obtient des erreurs de duplication de clef primaire quand je fais des insert??? Pourquoi SQL Server n'est pas capable de comprendre que que si il y a déjà une valeurs 4 dans la colonne ID et que 5 est libre, il devrait continuer la séquence à 5 ? (Dans ma table, j'ai laissé les ligne avec ID 4, 10, 11, 12, 15 pour tester)

    Mon but ici était de venir remplir les trous laissé par des delete sur les lignes dans la table.

    Est-ce possible de faire en sorte que SQL ne génére pas d'erreur de duplication de clef. Ce qui est bizarre est que si je roule la storedproc plusieurs fois, ca finit par passer au prochain ID disponible.

    Merci de votre aider

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Ceci est le fonctionnement normal de SQL Server.
    La valeur de la prochaine entrée à insérer est stockée ailleurs, c'est pour ça que plusieurs appels finissent par fonctionner.

    Si vous ne voulez pas que cela se produise : n'utilisez l'auto incrémentation et trouvez vous même la plus petite valeur pour laquelle il n'existe pas pas une valeur supérieure (et rajoutez 1 pour obtenir la nouvelle clé).

  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
    22 001
    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 : 22 001
    Billets dans le blog
    6
    Par défaut
    Récupérer les trous est généralement une mauvaise idée et n'a absolument aucun intérêt !

    À me lire : http://sqlpro.developpez.com/cours/clefs/

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

Discussions similaires

  1. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  2. Bulk insert et caractère accentué
    Par slc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2003, 12h52
  3. probleme d'insertion d'un Float
    Par neness dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2003, 12h32
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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