none
¿Como copiar tabla y cambiar propiedades de la columna con valor incremental? RRS feed

  • 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.

    lunes, 19 de septiembre de 2011 13:43

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
    
    


     

    lunes, 19 de septiembre de 2011 13:52

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
    
    


     

    lunes, 19 de septiembre de 2011 13:52
  • No, lo que yo quiero es como cada X tiempo que el usuario actualice la tabla de destino con la original, pero teniendo esta un campo incremental no se yo como se hara :(
    lunes, 19 de septiembre de 2011 14:07
  • 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
    


    lunes, 19 de septiembre de 2011 14:21
  • Existe alguna sentencia SQL en la que se pueda modificar que una columna, normal, pase a ser un id el cual se vaya incrementando uno a uno. La idea es tener una tabla, y modificar que una columna alfanumerica se vaya incrementando 1 a 1.
    martes, 20 de septiembre de 2011 8:28
  • 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/

    martes, 20 de septiembre de 2011 10:09
  • Lo "malo" es que si hago lo que me dices, la columna va a tener valores seguidos cuando la otra empieza por ejemplo por 428, luego salta 10, salta 1...etc, se debe a que la gente haya borrado.
    martes, 20 de septiembre de 2011 10:14
  • Si necesitas que la columna nueva tenga valores explícitos, ya te he indicado cómo en respuestas anteriores.
    martes, 20 de septiembre de 2011 10:21
  • 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.
     

    miércoles, 21 de septiembre de 2011 8:05