Pregunta

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 así como:

alter table tblFoo 
    alter column bar identity(1,1)
¿Fue útil?

Solución

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

Otros consejos

La solución publicada por Vikash no funciona; produce una " Sintaxis incorrecta " error en SQL Management Studio (2005, como se especifica el OP). El hecho de que la "Edición compacta" de SQL Server admite este tipo de operación es solo un acceso directo, porque el proceso real es más parecido a lo que Robert & amp; JohnFX dijo: crear una tabla duplicada, completar los datos, renombrar el & amp; nuevas tablas adecuadamente.

Si desea mantener los valores que ya existen en el campo que debe ser una identidad, puede 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 soltar y volver a crear una tabla (tname1) que se usa con código en vivo ! :)

¿Está poblada la tabla? Si no, suelte y vuelva a crear la tabla.

Si se llena, ¿qué valores ya existen en la columna? Si son valores que no desea 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 llene la columna de identidad como de costumbre. Cambie el nombre de su tabla original y cambie el nombre de la nueva al nombre correcto :).

Finalmente, si la columna en la que desea crear una identidad actualmente contiene valores de clave primaria y ya está siendo referenciada por otras tablas, tendrá que volver a pensar totalmente si está seguro de que esto es lo que quiere hacer :)

No hay una forma directa de hacerlo, 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 reducirá la cantidad de dedos gordos.

  • En el Explorador de objetos MSSMS, haga clic 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 - > SÍ (posiblemente semilla)
  • Ctr + S la tabla

 ingrese la descripción de la imagen aquí

Esto soltará y volverá a crear la tabla con todos los datos originales. Si recibe una advertencia:

 ingrese la descripción de la imagen aquí

Vaya a MSSMS Herramientas - > Opciones - > Diseñadores - > Diseñadores de tablas y bases de datos y desmarque la opción " Evitar guardar cambios que requieren la recreación de la tabla "

Cosas a tener en cuenta:

  1. su DB tiene suficiente espacio en disco antes de hacer esto
  2. la base de datos no está en uso (especialmente la tabla que está cambiando)
  3. asegúrese de hacer una copia de seguridad de su base de datos antes de hacerlo
  4. si la tabla tiene muchos datos (más de 1G) pruébelo primero en otro lugar antes de usar en DB real
  1. Crear una nueva tabla

    SELECT * INTO Table_New FROM Table_Current WHERE 1 = 0;
    
  2. Eliminar columna de una tabla nueva

    Alter table Table_New drop column id;
    
  3. Agregar columna con identidad

    Alter table Table_New add id int primary key identity; 
    
  4. Obtener todos los datos en una nueva tabla

    SET IDENTITY_INSERT Table_New ON;
    INSERT INTO Table_New (id, Name,CreatedDate,Modified) 
    SELECT id, Name,CreatedDate,Modified FROM Table_Current;
    SET IDENTITY_INSERT Table_New OFF;
    
  5. Descartar tabla antigua

    drop table Table_Current;
    
  6. Renombrar nueva tabla como antigua

    EXEC sp_rename 'Table_New', 'Table_Current';
    
alter table tablename 
alter column columnname 
add Identity(100,1)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top