2009-08-14 6 views
38

J'ai une table Orders avec les champs suivants:Régler la valeur de départ pour la colonne avec autoincrement

Id | SubTotal | Tax | Shipping | DateCreated

La colonne Id est réglé sur autoincrement(1,1).

Ceci doit être utilisé dans une vitrine de commerce électronique. Parfois, un magasin E-commerce actuel est migré vers ma plate-forme et ils ont déjà des ordres - ce qui peut signifier que leur Order.Id actuel est, par exemple, 9586.

Je souhaite que le champ autoincrement démarre à partir de cette valeur.

Comment est-ce que je peux faire ceci?

Répondre

70

De Resetting SQL Server Identity Columns:

Récupération de l'identité de la table Employees:

DBCC checkident ('Employees') 

Réparation de la graine d'identité (si, pour une raison quelconque, la base de données est d'insérer des identités en double):

DBCC checkident ('Employees', reseed) 

Changer la graine d'identité pour la table Employees à 1000:

DBCC checkident ('Employees', reseed, 1000) 

La ligne suivante insérée commence à 1001.

21

Vous devez définir la graine d'identité à cette valeur:

CREATE TABLE orders 
(
id int IDENTITY(9586,1) 
) 

Pour modifier une table en cours:

ALTER TABLE orders ALTER COLUMN Id IDENTITY (9586, 1); 

Plus d'info sur CREATE TABLE (Transact-SQL) IDENTITY (Property)

+3

La commande ALTER TABLE ci-dessus ne fonctionne pas pour moi dans Microsoft SQL Server 2012. Il donne cette erreur: « syntaxe incorrecte près du mot-clé « IDENTITE ». » La commande DBCC dans la réponse acceptée a fonctionné correctement cependant. –

9

Notez également que vous ne pouvez normalement pas définir de valeur pour une colonne IDENTITY. Vous pouvez toutefois spécifier l'identité des lignes si vous définissez IDENTITY_INSERT sur ON pour votre table. Par exemple:

SET IDENTITY_INSERT Orders ON 

-- do inserts here 

SET IDENTITY_INSERT Orders OFF 

Cet insert réinitialise l'identité à la dernière valeur insérée. De MSDN:

If the value inserted is larger than the current identity value for the table, SQL Server automatically uses the new inserted value as the current identity value.

+0

juste ce que j'étais après - était utile pour remplir une base de données que je migrais d'un php mysql à une application C# MVC – pigeon

Questions connexes