2010-10-02 5 views
0

J'ai une table appelée customer_master qui comprend une colonne appelée cust_id avec autoincrement à 1.Insérer des données dans le tableau de données du serveur SQL

Lorsque nous essayons d'insérer des enregistrements ses dossiers fins et insérés de travail comme cust_id 1, 2 , 3 et 4 sont insérés, mais lorsqu'une erreur est générée dans la commande insert, nous effectuons une annulation de transaction, cela signifie que cust_id 5 n'est pas inséré, mais lorsque nous insérons un autre enregistrement, cust_id génère 6. Il saute cust_id 5.

Je souhaite le configurer de sorte que si une erreur est générée dans la commande d'insertion, l'identité n'est pas incrémentée.

Nous utilisons C# et SQL Server 2005.

Répondre

0

Vous pouvez utiliser DBCC CHECKIDENT réensemencer la colonne d'identité après une panne d'insertion.

DBCC CHECKIDENT (table_name, NORESEED) renvoie la valeur d'identité en cours et la valeur maximale de courant de la colonne d'identité.

DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) définit la valeur d'identité en cours à la new_reseed_value.

1

La raison pour laquelle SQL Server fait cela est pour l'efficacité. Si vous avez besoin d'un numéro de séquence sans lacunes, vous ne devez pas utiliser identity. Vous devez implémenter votre propre schéma où les transactions concurrentes sont bloquées en attendant la valeur suivante au cas où la transaction initiale serait annulée.

The second query here could be used for that purpose. Mais en as-tu vraiment besoin? Si c'est purement à des fins esthétiques, mon conseil est de ne pas s'en faire!

Questions connexes