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 table existante en utilisant T-SQL?
quelque Chose comme:
alter table tblFoo
alter column bar identity(1,1)
5 réponses
Je ne crois pas que tu puisses faire ça. Votre meilleur pari est de créer une nouvelle colonne identity et de copier les données en utilisant une commande identity insert (si vous voulez vraiment garder les anciennes valeurs).
voici un article décent décrivant le processus en détail: http://www.mssqltips.com/tip.asp?tip=1397
la solution Postée par Vikash ne fonctionne pas; elle produit une erreur de "syntaxe incorrecte" Dans SQL Management Studio (2005, comme L'OP spécifié). Le fait que l '"édition compacte" de SQL Server supporte ce type d'opération n'est qu'un raccourci, parce que le processus réel ressemble plus à ce que Robert & JohnFX ont dit: créer une table dupliquée, peupler les données, renommer les tables originales & nouvelles de manière appropriée.
Si vous souhaitez conserver les valeurs qui existent déjà dans le champ de 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, laisser tomber et recréer une table (tname1) qui est utilisée par code en direct N'est pas recommandé! :)
la table est-elle peuplée? Si ce n'est pas tomber et recréer la table.
si elle est peuplée, quelles valeurs existent déjà dans la colonne? Si ce sont des valeurs que vous ne souhaitez pas conserver.
créer une nouvelle table comme vous le désirez, charger les enregistrements de votre ancienne table dans votre nouvelle talbe et laisser la base de données peupler la colonne d'identité comme normale. Renommez votre table originale et renommez la nouvelle au nom correct :).
Enfin, si la colonne que vous souhaitez faire identity contient actuellement des valeurs clés primaires et est déjà référencé par d'autres tables vous aurez besoin de réfléchir totalement si vous êtes sûr que c'est ce que vous voulez faire :)
Il n'y a aucun moyen direct de le faire sauf:
A) par SQL i.e.:
-- make sure you have the correct CREATE TABLE script ready with IDENTITY
SELECT * INTO abcTable_copy FROM abcTable
DROP TABLE abcTable
CREATE TABLE abcTable -- this time with the IDENTITY column
SET IDENTITY_INSERT abcTable ON
INSERT INTO abcTable (..specify all columns!) FROM (..specify all columns!) abcTable_copy
SET INDENTITY_INSERT abcTable OFF
DROP TABLE abcTable_copy
-- I would suggest to verify the contents of both tables
-- before dropping the copy table
B) par le MSSMS qui fera exactement la même chose en arrière-plan mais moins de gros doigtés.
- dans L'Explorateur D'objets mssms cliquez avec le bouton droit de la souris sur la table que vous devez modifier
- sélectionnez "design" sélectionnez la colonne que vous souhaitez ajouter identité à
- changer le paramètre d'identité de non - > oui (peut-être graine)
- Ctr+S le tableau
supprimer et recréer le tableau avec toutes les données d'origine. Si vous obtenez un avertissement:
Go to MSSMS Outils -> Options -> les Concepteurs -> Table et des Concepteurs de base de données et décochez l'option "empêcher de sauvegarder les modifications qui nécessitent une table re-création"
choses à surveiller:
- votre base de données a assez d'espace disque avant que vous ne le fassiez
- le DB n'est pas en cours d'utilisation (en particulier la table vous sont en train de changer)
- assurez-vous de sauvegarder votre base de données avant de le faire
- si la table a beaucoup de données (plus de 1G) essayez-la ailleurs d'abord avant d'utiliser en REAL DB
alter table tablename
alter column columnname
add Identity(100,1)