Principales respuestas
¿Como copiar tabla y cambiar propiedades de la columna con valor incremental?

Pregunta
-
Hola,
Estoy desarrollando un aplicativo el cual quiero que realice la copia de una tabla de una BBDD a otra y la modificación de una propiedades de la columna:
Tengo dons Appset iguales, y me gustaría copiar una tabla, la cual tiene un campo ID que se incrementa cada vez que se añade un valor. Me gustaría copiar esta tabla, en el otro appset y que respete el orden numérico de ID.
La idea que tengo en mente es, copiar la tabla del Appset 1 al 2 pero sin poner que la columna tenga valor incremental. Del appset 2 borrar la tabla mencionada y finalmente renombrar la tabla que he creado con el nombre de la borrada y poner que la columna sea incremental.
Alguna sugerencia?
Gracias.
Respuestas
-
No es necesario hacer eso: crea la tabla exactamente igual que en origen, y si quieres que el siguiente valor insertado en la nueva tabla sea el siguiente que le correspondería a la tabla origen, usa DBCC CHECKIDENT con la opción de especificar el valor a partir del cual insertar (mira el ejemplo "C"):
USE AdventureWorks2008R2; GO DBCC CHECKIDENT ("Person.AddressType", RESEED, 10); GO
- Propuesto como respuesta Miguel Egea GómezMVP, Moderator lunes, 19 de septiembre de 2011 14:01
- Marcado como respuesta Diego MC miércoles, 21 de septiembre de 2011 8:04
Todas las respuestas
-
No es necesario hacer eso: crea la tabla exactamente igual que en origen, y si quieres que el siguiente valor insertado en la nueva tabla sea el siguiente que le correspondería a la tabla origen, usa DBCC CHECKIDENT con la opción de especificar el valor a partir del cual insertar (mira el ejemplo "C"):
USE AdventureWorks2008R2; GO DBCC CHECKIDENT ("Person.AddressType", RESEED, 10); GO
- Propuesto como respuesta Miguel Egea GómezMVP, Moderator lunes, 19 de septiembre de 2011 14:01
- Marcado como respuesta Diego MC miércoles, 21 de septiembre de 2011 8:04
-
-
Si lo que quieres es copiar los datos cada vez que el usuario realice una acción, podrías seguir usando lo que te comentaba (tal vez ignorando la parte de DBCC si no se van a realizar otro tipo de inserciones) y hacer un INSERT ... SELECT especificando explícitamente el valor de la columna identidad. Algo como
SET IDENTITY_INSERT tablaDestino ON INSERT tablaDestino (campoIdentity, campoA, campoB...) SELECT campoIdentity, campoA, campoB... FROM tablaOrigen SET IDENTITY_INSERT tablaDestino OFF
-
-
Justamente eso, pasar una columna no identity a que lo sea, no se puede.
La solución pasa por crear una nueva columna de tipo identidad, asignarle explícitamente los valores de la columna que quieres sustituir, eliminarla y posteriormente renombrar la nueva columna con la anterior. Básicamente lo que hace SSMS cuando haces esta operación.
En cualquier caso, esta respuesta ya fue respondida anteriormente en este mismo foro. Echa un vistazo a http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/b13826a0-91df-4524-8aa0-4eba738f1198/
-
-
-
Al final lo que hice fue eliminar los datos de la tabla de destino, copiarme la tabla origen en un fichero plano e ir linea por linea haciendo la consulta CHECKIDENT ("Person.AddressType", RESEED, 10); + insert contra la tabla destino.
Gracias.