36 votes

Comment ajouter la propriété identity à une colonne existante dans SQL Server

Dans SQL Server (dans mon cas, 2005), comment puis-je ajouter la propriété identity à une colonne de table existante à l'aide de t-sql?

quelque chose comme:

 alter table tblFoo alter column bar identity(1,1)
 

31voto

JohnFx Points 23761

Je ne crois pas que vous puissiez faire ça. Votre meilleur choix est de créer une nouvelle colonne d’identité et de copier les données à l’aide d’une commande d’insertion d’identité (si vous souhaitez conserver les anciennes valeurs).

Voici un article décent décrivant le processus en détail: http://www.mssqltips.com/tip.asp?tip=1397

12voto

NateJ Points 426

La solution posté par Vikash ne fonctionne pas; il se produit une "syntaxe Incorrecte" erreur dans SQL Management Studio (2005, OP spécifiée). Le fait que le "Compact Edition" de SQL Server prend en charge ce genre d'opération n'est qu'un raccourci, parce que le processus réel est plus proche de ce Robert & JohnFX dit-création d'une table en double, en remplissant les données, le changement de nom de l'origine & de nouvelles tables de façon appropriée.

Si vous souhaitez conserver les valeurs qui existent déjà dans le champ qui doit être une identité, vous pourriez faire quelque chose comme ceci:

CREATE TABLE tname2 (etc.)
INSERT INTO tname2 FROM tname1

DROP TABLE tname1
CREATE TABLE tname1 (with IDENTITY specified)

SET IDENTITY_INSERT tname1 ON
INSERT INTO tname1 FROM tname2
SET IDENTITY_INSERT tname1 OFF

DROP tname2

Bien sûr, la suppression et la re-création d'une table (tname1) qui est utilisé par de code en direct n'est PAS recommandé! :)

2voto

Robert Points 1119

Le tableau peuplée? Si pas de supprimer et recréer la table.

Si il est peuplé quelles sont les valeurs qui existent déjà dans la colonne? Si ce sont des valeurs que vous ne souhaitez pas conserver.

Créer une nouvelle table que vous le désirez, de charger les enregistrements à partir de votre ancienne table dans votre nouvelle talbe et de laisser la base de données de remplir la colonne d'identité comme d'habitude. Renommer votre table d'origine et renommer le nouveau nom correct :).

Enfin, si la colonne que vous souhaitez faire de l'identité contient actuellement des valeurs de clé primaire et est déjà référencé par d'autres tables, vous devrez entièrement re pense que si vous êtes sûr que c'est ce que vous voulez faire :)

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