Principales respuestas
Hacer hacer una columna existente "primary key" y "auto_increment"

Pregunta
-
Buenas tardes,
Disculpen como cambio una columna ya existente para que sea primary key y al mismo tiempo sea auto incrementable, la columna ya lleva numeracion unica lo que me gustaria es que la continue de manera automatica a ingresar los siguientes registros...
De antemano agradezco su ayuda.
Respuestas
-
Si tienes acceso a través de SSMS, haz clic-derecho en la tabla y selecciona "Design".
Sobre la pantalla de diseño puedes hacer clic-derecho sobre el campo y convertirlo en clave primaria, y en la parte de abajo le puedes seleccionar que lo convierta en Identity.
Después puedes pulsar el "disquete" de la parte de arriba para que lo ejecute directamente, o si quieres puedes pulsar otro iconito que sirve para "generar script". Ese script te da el SQL que habría que ejecutar para conseguir los cambios deseados en la tabla.
Observarás que por dentro hace cosas bastante complicadas, tales como eliminar los constraints, crear una tabla temporal con el identity, copiar los registros desde la tabla original a la temporal, borrar la original, renombrar la temporal a la original, y volver a poner los constraints. Esto tiene el inconveniente de que transitoriamente tienes que tener duplicados los datos, cosa que puede ser problemática si no tienes suficiente espacio, o si el tiempo que ello requiere (por ser la tabla de gran tamaño) resulta excesivo. Por eso de forma predeterminada te da un aviso diciendo que no se puede hacer el cambio solicitado porque requeriría recrear la tabla. Puedes desactivar esta limitación desde las Opciones de SSMS, y entonces ya sí que te deja hacer este cambio.
Cuando termines todo eso, recuerda usar el comando dbcc con los parámetros adecuados para cambiar el valor inicial del Identity, de manera que empiece con el valor siguiente el último que había.
- Propuesto como respuesta Willams Morales lunes, 26 de marzo de 2018 22:11
- Marcado como respuesta Pablo RubioModerator sábado, 31 de marzo de 2018 23:55
Todas las respuestas
-
Hola Zaga KWS:
Si es posible.
alter table MITABLA add CLAVE int identity(1,1) GO /*AÑADIDO EL CAMPO IDENTITY */ alter table MITABLA drop constraint PK__pepe__DF908D65F5E7C8CF /*ELIMINAS LA ACTUAL CLAVE PRIMARIA, EN EL MANAGEMENT STUDIO BUSCA EN LA TABLA, EN EL MAS, EN CLAVES */ GO ALTER TABLE MITABLA ADD CONSTRAINT PK_NUEVOID PRIMARY KEY CLUSTERED (CLAVE); /*AÑADES LA RESTRICCION*/
https://docs.microsoft.com/es-es/sql/relational-databases/tables/modify-primary-keys
Un saludo
-
Si tienes acceso a través de SSMS, haz clic-derecho en la tabla y selecciona "Design".
Sobre la pantalla de diseño puedes hacer clic-derecho sobre el campo y convertirlo en clave primaria, y en la parte de abajo le puedes seleccionar que lo convierta en Identity.
Después puedes pulsar el "disquete" de la parte de arriba para que lo ejecute directamente, o si quieres puedes pulsar otro iconito que sirve para "generar script". Ese script te da el SQL que habría que ejecutar para conseguir los cambios deseados en la tabla.
Observarás que por dentro hace cosas bastante complicadas, tales como eliminar los constraints, crear una tabla temporal con el identity, copiar los registros desde la tabla original a la temporal, borrar la original, renombrar la temporal a la original, y volver a poner los constraints. Esto tiene el inconveniente de que transitoriamente tienes que tener duplicados los datos, cosa que puede ser problemática si no tienes suficiente espacio, o si el tiempo que ello requiere (por ser la tabla de gran tamaño) resulta excesivo. Por eso de forma predeterminada te da un aviso diciendo que no se puede hacer el cambio solicitado porque requeriría recrear la tabla. Puedes desactivar esta limitación desde las Opciones de SSMS, y entonces ya sí que te deja hacer este cambio.
Cuando termines todo eso, recuerda usar el comando dbcc con los parámetros adecuados para cambiar el valor inicial del Identity, de manera que empiece con el valor siguiente el último que había.
- Propuesto como respuesta Willams Morales lunes, 26 de marzo de 2018 22:11
- Marcado como respuesta Pablo RubioModerator sábado, 31 de marzo de 2018 23:55
-
...Cuando termines todo eso, recuerda usar el comando dbcc con los parámetros adecuados para cambiar el valor inicial del Identity, de manera que empiece con el valor siguiente el último que había.
Entiendo que no es necesario, que la secuencia es inferida respecto a los valores existentes, de hecho entiendo que la función IDENT_CURRENT() debería retornar el último valor de identidad "asumido" para la tabla en cuestión.
Sugiero, posterior a realizar el cambio en el diseñador siguiendo las sugerencias de Alberto, ejecutar el siguiente comando para corroborar el valor de identidad:
SELECT IDENT_CURRENT('TableName'); GO
- Propuesto como respuesta Tonatiuh AbregoModerator martes, 27 de marzo de 2018 17:11