SQLSERVER: ¿Cómo alterar una clave primaria de tabla existente para convertirse en una columna de identidad?

StackOverflow https://stackoverflow.com/questions/1035730

Pregunta

Mi base de datos tiene una tabla con miles de registros. La clave primaria es un entero. Hay muchas restricciones de clave externa asociadas con esta columna.

Quiero cambiar esta columna para convertirla en una clave de identidad. ¿Cuál es la mejor manera de hacerlo? También necesito enviar esta actualización a las instalaciones de nuestros clientes.

Puntos de bonificación para una respuesta que funciona en Sql Server 2000.

¿Fue útil?

Solución

Hay una gran característica en SQL Server Management Studio que me salvó el día.

En SSMS, vaya a Opciones - > Diseñadores - > Diseñadores de tablas y bases de datos, marque " Generar automáticamente scripts de cambio " y desmarque " Evite guardar cambios que requieren la recreación de la tabla " ;.

En el explorador de objetos, vaya a su tabla y seleccione la columna que obtendrá la especificación de Identidad. Haga clic derecho y seleccione modificar. En el panel de propiedades de Columna, expanda el árbol " Especificación de identidad " y cambiar " (es identidad) " a sí Ahora en el tamaño superior izquierdo, seleccione el icono "Generar secuencia de comandos". Presta atención a los mensajes de advertencia.

Ahora tendrá un script generado que eliminará todas sus restricciones, volverá a crear la tabla con identidad y volverá a crear las restricciones. ¡GUAU!

Lo probaré y publicaré aquí mis resultados.

Actualización: Todo funcionó bien. Olvidé decir en la pregunta que necesito el script para reproducir la modificación en las instalaciones de nuestros clientes.

Este sitio es realmente fantástico. ¡El tiempo que pasé para escribir mi propia respuesta obtuve otros 3!

Otros consejos

En Enterprise Manager, haga clic con el botón derecho en la tabla en la vista de tabla, seleccione diseño.

haga clic en el lado izquierdo de la columna (luego, haga doble clic en identidad, en las columnas debajo, en las propiedades de la columna, enciéndalo, el valor predeterminado es el incremento automático 1

No hay una sola "ALTER TABLE" DDL para cambiar una columna existente a una columna de identidad. Solo puede agregar una nueva columna de identidad a una tabla existente.

Esto se puede hacer en Enterprise Manager, pero debe tener en cuenta que el servidor SQL está creando una nueva tabla y copiando sus datos en segundo plano. Puede tener algunos problemas con esto. Aquí hay un artículo que explica esto un poco más http://www.mssqltips.com/ tip.asp? tip = 1397

En su escenario, creo que necesitará una combinación de este script y algo para deshabilitar y volver a habilitar sus fk.

Si la columna es un número entero como parte de las relaciones existentes, entonces ya es única. ¡Por lo tanto, no tiene que preocuparse por los duplicados! Esa es una gran molestia ya evitada.

Puede emitir un comando ALTER TABLE para cambiar la columna o puede hacerlo con Enterprise Manager.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top