sql-server - una - quitar identity columna sql server
¿Cómo agrego la propiedad de identidad a una columna existente en SQL Server? (5)
En SQL Server (en mi caso, 2005) ¿cómo puedo agregar la propiedad de identidad a una columna de tabla existente usando T-SQL?
Algo como:
alter table tblFoo
alter column bar identity(1,1)
No creo que puedas hacer eso. Su mejor opción es crear una nueva columna de identidad y copiar los datos utilizando un comando de inserción de identidad (si realmente desea mantener los valores anteriores).
Aquí hay un artículo decente que describe el proceso en detalle: http://www.mssqltips.com/tip.asp?tip=1397
¿La tabla está poblada? Si no, suelta y vuelve a crear la tabla.
Si está poblado, ¿qué valores ya existen en la columna? Si son valores que no quieres conservar.
Cree una nueva tabla como lo desee, cargue los registros de su tabla anterior en su nuevo talbe y deje que la base de datos rellene la columna de identidad de forma normal. Cambie el nombre de su tabla original y cambie el nombre del nuevo al nombre correcto :).
Finalmente, si la columna que desea crear contiene actualmente valores de clave primaria y otras tablas ya la mencionan, tendrá que volver a pensar totalmente si está seguro de que esto es lo que quiere hacer :)
La solución publicada por Vikash no funciona; produce un error de "sintaxis incorrecta" en SQL Management Studio (2005, como se especificó el OP). El hecho de que la "Edición Compacta" de SQL Server admite este tipo de operación es solo un atajo, porque el proceso real se parece más a lo que dijo Robert & JohnFX: crear una tabla duplicada, rellenar los datos, cambiar el nombre de las tablas originales y nuevas adecuadamente.
Si desea mantener los valores que ya existen en el campo que deben ser una identidad, podría hacer algo como esto:
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
Por supuesto, ¡NO se recomienda dejar caer y volver a crear una tabla (tname1) que es usada por el código en vivo ! :)
alter table tablename
alter column columnname
add Identity(100,1)
No hay una manera directa de hacer esto excepto:
A) a través de SQL, es decir:
-- 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) A través de MSSMS que hará exactamente lo mismo en el fondo, pero tendrá menos digitación de grasa.
- En MSSMS Object Explorer, haga clic derecho en la tabla que necesita modificar
- Seleccione "diseño" Seleccione la columna a la que desea agregar IDENTIDAD para
- Cambiar la configuración de identidad de NO -> YES (posiblemente semilla)
- Ctr + S la tabla
Esto soltará y volverá a crear la tabla con todos los datos originales. Si recibes una advertencia:
Vaya a Herramientas de MSSMS -> Opciones -> Diseñadores -> Diseñadores de tablas y bases de datos y desmarque la opción "Impedir guardar cambios que requieren la recreación de la tabla"
Cosas que tener cuidado al respecto:
- su base de datos tiene suficiente espacio en disco antes de hacer esto
- el DB no está en uso (especialmente la tabla que está cambiando)
- asegúrese de hacer una copia de seguridad de su DB antes de hacerlo
- si la tabla tiene una gran cantidad de datos (más de 1G) pruébelo en otro lugar antes de usarlo en DB real