292 votes

Sql Server ajouter un incrément automatique de la clé primaire de la table existante

Comme le titre, j'ai une table existante qui est déjà rempli avec 150000 enregistrements. J'ai ajouté une colonne d'Id (qui est actuellement nulle).

Je suppose que je peux exécuter une requête pour remplir cette colonne avec des numéros, puis définir comme clé primaire et activez auto incrément. Est-ce la bonne façon de procéder? Et si oui, comment dois-je remplir les effectifs initiaux?

495voto

marc_s Points 321990

Non, vous devez le faire dans l'autre sens: de l'ajouter à droite de l'aller comme INT IDENTITY - il sera rempli avec les valeurs d'identité lorsque vous faites cela:

ALTER TABLE dbo.YourTable
   ADD ID INT IDENTITY

et puis vous pouvez rendre la clé primaire:

ALTER TABLE dbo.YourTable
   ADD CONSTRAINT PK_YourTable
   PRIMARY KEY(ID)

22voto

gbn Points 197263

Vous ne pouvez pas "activer" l'IDENTITÉ: c'est une table de reconstruction.

Si vous n'avez pas de soins sur le numéro de la commande, vous devez ajouter la colonne not NULL, avec l'IDENTITÉ d'un seul coup. 150k lignes n'est pas beaucoup.

Si vous avez besoin de conserver un certain nombre de commande, puis ajouter les chiffres en conséquence. Ensuite, utilisez la SSMS concepteur de table pour définir l'IDENTITÉ de la propriété. Cela permet de générer un script qui se chargera de la colonne de chute/ajouter/conserver les numéros de/réamorçage pour vous.

18voto

Kevin Points 757

J'ai eu ce problème, mais je ne pouvais pas utiliser une colonne d'identité (pour diverses raisons). Je me suis installé sur ce:

DECLARE @id INT
SET @id = 0 
UPDATE table SET @id = id = @id + 1 

Emprunté à partir d' ici.

7voto

Renzo Ciot Points 426

Si la colonne n'existe déjà dans votre tableau et elle est nulle, vous pouvez mettre à jour la colonne avec cette commande (remplacer les pièces d'identité, le nom de la table, et tablekey ):

UPDATE x
SET x.<Id> = x.New_Id
FROM (
  SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
  FROM <tablename>
  ) x

6voto

user3279092 Points 1

Lorsque nous ajoutons de l'identité et de colonne dans une table existante, il remplira automatiquement pas besoin de remplir manuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X