Cómo agrego la propiedad identity a una columna existente en SQL Server
En SQL Server (en mi caso, 2005) ¿cómo puedo agregar la propiedad identity a una columna de tabla existente usando T-SQL?
Algo como:
alter table tblFoo
alter column bar identity(1,1)
5 answers
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 antiguos).
Aquí hay un artículo decente que describe el proceso en detalle: http://www.mssqltips.com/tip.asp?tip=1397
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 20:59:46
La solución publicada por Vikash no funciona; produce un error de "sintaxis incorrecta" en SQL Management Studio (2005, como el OP especificado). El hecho de que la" Edición Compacta " de SQL Server soporte este tipo de operación es solo un atajo, porque el proceso real se parece más a lo que Robert & JohnFX dijo: crear una tabla duplicada, rellenar los datos, cambiar el nombre de las tablas originales y nuevas apropiadamente.
Si desea mantener los valores que ya existen en el campo que necesita para ser una identidad, podrías 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 (nombre1) que es utilizada por live code! :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-26 21:14:21
¿Está rellenada la tabla? Si no caer y volver a crear la tabla.
Si se rellena, ¿qué valores ya existen en la columna? Si son valores que no quieres mantener.
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 llene la columna de identidad de forma normal. Cambie el nombre de la tabla original y cambie el nombre de la nueva al nombre correcto:).
Finalmente si la columna que desea hacer identidad actualmente contiene valores de clave primaria y ya está siendo referenciado por otras tablas que tendrá que re pensar totalmente si estás seguro de que esto es lo que quieres hacer:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-14 12:08:36
No hay forma 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 hará menos fat-digitación.
- En el Explorador de objetos MSSMS, haga clic con el botón derecho en la tabla que necesita modificar
- Seleccione "diseño" Seleccione la columna a la que desea agregar IDENTIDAD
- Cambie la configuración de identidad de NO - > YES (posiblemente seed)
- Ctr + S el tabla
Esto caerá y recreará la tabla con todos los datos originales en ella. Si recibe una advertencia:
Vaya a MSSMS Herramientas - > Opciones -> Diseñadores - > Diseñadores de tablas y bases de datos y desmarca la opción "Evite guardar los cambios que requieren la recreación de la tabla"
Cosas a tener en cuenta:
- su base de datos tiene suficiente espacio en disco antes que usted esto
- la base de datos no está en uso (especialmente la tabla que está cambiando)
- asegúrese de hacer una copia de seguridad de su base de datos antes de hacerlo
- si la tabla tiene muchos datos (más de 1G) pruébelo en otro lugar primero antes de usar en DB real
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-25 19:50:45
alter table tablename
alter column columnname
add Identity(100,1)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-14 19:51:16