2009-09-02 14 views
5

Quería modificar una columna en una tabla de sql server 2005 a IDENTIDAD (1,1) A propósito, esta tabla está vacía y la columna ser cambiado es una clave primaria.
Esta columna también es una clave externa para otras dos tablas.
sql server helper procedimiento almacenado o utilidad para alterar tabla alterar columna IDENTIDAD (1,1)

Después de googlear encontré que no puede usar la sintaxis de la tabla Alter para modificar una columna y convertirla en una columna de identidad.
Enlace # 1: How do I add the identity property to an existing column in SQL Server
Enlace # 2: Adding an identity to an existing column -SQL Server

terminé de comprobar las tablas dependientes (2 de ellos) eliminar las claves externas (generada por el script desde SSMS) y luego dejar caer la mesa principal y luego re -crear con identidad. (Podría probar también la opción de cambiar el nombre aquí)
Luego volvió a crear las claves foráneas para las dos tablas dependientes anteriores.

Pero todo esto era un trabajo manual, cualquier script o SP para que sea más fácil.

Lo ideal sería que todos estos pasos se llevaría a cabo mediante una secuencia de comandos/herramienta/utilidad de tales: las tablas dependientes

  1. Verificar teclas
  2. generar crear y soltar guiones de clave externa para este
  3. generar crear secuencia de comandos para la tabla principal
  4. soltar la tabla principal (o cambiar el nombre de la tabla si la tabla tiene datos)
  5. volver a crear la tabla con la columna de identidad habilitado
  6. recrear las claves externas

Respuesta

4

Puede utilizar SSMS para generar una secuencia de comandos (Edición de una tabla, excepto la escritura), pero por lo demás es un proceso manual como lo identificaste

Los scripts SSMS recogerán dependencias, etc. Para este tipo de trabajo, tiendo a usar SSMS para generar un script básico, probándolo un poco, ejecútelo con cuidado, luego use una herramienta de comparación (como Red Gate compare) para generar una versión más segura.

Editar: The SSMS error is not an error, it's a safety check that can be switched off

+0

+1, hay tantas cosas que cambiar con las tablas/columnas/claves/restricciones/etc. sería imposible tener una utilidad para cada uno. es por eso que puede usar la GUI para generar un script –

+1

SSMS arroja un error, esta fue la primera opción que probé. Debería haber mencionado en la pregunta ... –

+0

Gracias por el enlace, deshabilitar la opción funcionó como un encanto. –

2

(. Esto es simplemente un seguimiento al post de GBN con más detalles - que no es tan fácil de calcular esta materia hacia fuera) (

No es imposible escribir una utilidad para hacer esto, sólo muy complejo y muy difícil Afortunadamente, Microsoft ha hecho ya - se llama SSMS (o SMO?) para generar una secuencia de comandos:.

  • en el objeto. Explorer, profundiza en la base de datos y la tabla que quieras modificar Haga clic derecho y seleccione Diseño

  • Realice los cambios deseados en la única tabla en la pantalla de diseño. Es razonablemente intuitivo.

  • Para agregar/eliminar la propiedad de identidad, seleccione la columna en el panel superior, y en el panel inferior/pestaña "Propiedades de columna", expanda y configure los ajustes en "Especificación de identidad".

  • Para generar una secuencia de comandos para implementar todos sus cambios, incorporando todos los cambios de tecla dependientes, haga clic en el botón de la barra de herramientas "Generar secuencia de cambio". Esta también es una opción en el menú "Diseñador de tablas".

También hago esto para generar secuencias de comandos (que más tarde se modifico -. SSMS no siempre produce el código más eficiente) Una vez hecho esto, puede salir sin guardar los cambios - dejándole un DB puedes probar tu nuevo script.

+0

Gracias, no sabía si debería ir a detalles ... – gbn

+0

Solo me encontré con esta característica por accidente hace mucho tiempo. Al principio, la generación y revisión de estos guiones me enseñó mucho sobre SQL; más tarde me llevó a muchas formas de cómo no escribir SQL. (Supongo que el código generado por SSMS es - tiene que ser - compatible con SQL de nuevo a 7.0, y tal vez antes?) –

+0

Ya lo intenté, de hecho, esto fue lo primero que probé. I da un error "Guardar cambios no permitidos, los cambios que ha realizado requieren que se elimine la siguiente tabla ....... requieren que la tabla se vuelva a crear" –

0
  1. caída del pk y construir la misma columna de tipo de datos
  2. copiar los datos de la columna que desea establecer la identidad de la nueva columna.
  3. deje caer la antigua columna
  4. restablecimiento primaria clave

ALTER TABLE UserRole DROP CONSTRAINT PK_XX ALTER TABLA XX

AÑADIR newX int identidad no nulo (1,1) primaria clave

update XX set newX = oldX

alter table XX DROP COLUM N oldX

esta es la forma más sencilla de configurar la columna de identidad. si no desea utilizar el script generado durante mucho tiempo.

Cuestiones relacionadas