none
Migración base de datos SQL Server RRS feed

  • Pregunta

  • Hola todos

    Tengo el siguiente problema necesito migrar de una base de datos a otra, pero con diferente estructura, por ejemplo:

    BASE DE DATOS INICIAL

    En la imagen se muestra dos tablas a migrar la tabla documentos y la tabla movimientos que se relacionan con el campo IDDOC.

    BASE DE DATOS A MIGRAR

    En las tablas REGISTROS y REGISTRO_MOVIMIENTO los nombres de los campos cambian y adicionalmente los identity comienzan desde el número 1 

    Como puedo realizar la migración sin que me afecte la relación de las dos tablas


    Wilmar G

    lunes, 16 de diciembre de 2019 21:44

Respuestas

  • Hola Wilmar Garzón:

    Añadiendo otra columna para que mantenga la relación.

    CREATE TABLE TABLADOCUMENTOS (IDDOC INT, FECHA_RADICACION DATETIME, RADICADO VARCHAR(100))
    CREATE TABLE TABLAREGISTROS (IDREGISTRO INT IDENTITY(1,1), FECHA_RADICACION DATETIME, RADICADO VARCHAR(100), idDOC INT)
    GO
    INSERT INTO TABLADOCUMENTOS (IDDOC, FECHA_RADICACION, RADICADO)
    VALUES
    (12,'20151111 08:10:23.280','R-2015-000001'),
    (13,'20151111 08:11:28.977','R-2015-000002'),
    (14,'20151111 08:10:23.280','R-2015-000003'),
    (15,'20151111 08:10:23.280','R-2015-000004'),
    (16,'20151111 08:10:23.280','R-2015-000005'),
    (17,'20151111 08:10:23.280','R-2015-000006'),
    (18,'20151111 08:36:15.047','R-2015-000007'),
    (19,'20151111 08:36:15.047','R-2015-000008'),
    (20,'20151111 08:36:15.047','R-2015-000009'),
    (21,'20151111 08:10:23.280','R-2015-000010');
    GO
    INSERT INTO TABLAREGISTROS (FECHA_RADICACION, RADICADO, IDDOC)
    
    SELECT 
           T.FECHA_RADICACION
         , T.RADICADO
    	 , T.IDDOC
    FROM TABLADOCUMENTOS T;
    
    GO
    SELECT * fROM TABLAREGISTROS
    

    Cuando realizas el insert, Sql server valida que para cada columna por el nombre que le has definido después de insert, entra el tipo de dato, que le envías en la select.

    En este caso, dejamos el identity que vaya solo, y seleccionamos, la fecha, radicación y el idDoc de su tabla original.

    Además puedes mantener después la integridad referencial añadiendo el correspondiente

    ALTER TABLE TABLAREGISTROS
    ADD CONSTRAINT FK_TABLAREGISTROS_MOVIMIENTO FOREIGN KEY (IDDOC) REFERENCES TABLAREGISTRO_MOVIMIENTO (IDDOC);

    • Marcado como respuesta Wilmar Garzón martes, 17 de diciembre de 2019 14:11
    martes, 17 de diciembre de 2019 6:43

Todas las respuestas

  • Hola Wilmar Garzón:

    Puedes apagar los identitys y realizar la insercción explicita, y luego encenderlos.

    CREATE TABLE TABLADOCUMENTOS (IDDOC INT, FECHA_RADICACION DATETIME, RADICADO VARCHAR(100))
    CREATE TABLE TABLAREGISTROS (IDREGISTRO INT IDENTITY(1,1), FECHA_RADICACION DATETIME, RADICADO VARCHAR(100))
    GO
    INSERT INTO TABLADOCUMENTOS (IDDOC, FECHA_RADICACION, RADICADO)
    VALUES
    (12,'20151111 08:10:23.280','R-2015-000001'),
    (13,'20151111 08:11:28.977','R-2015-000002'),
    (14,'20151111 08:10:23.280','R-2015-000003'),
    (15,'20151111 08:10:23.280','R-2015-000004'),
    (16,'20151111 08:10:23.280','R-2015-000005'),
    (17,'20151111 08:10:23.280','R-2015-000006'),
    (18,'20151111 08:36:15.047','R-2015-000007'),
    (19,'20151111 08:36:15.047','R-2015-000008'),
    (20,'20151111 08:36:15.047','R-2015-000009'),
    (21,'20151111 08:10:23.280','R-2015-000010');
    GO
    SET IDENTITY_INSERT TablaRegistros ON 
    -- insercción explicita
    INSERT INTO TABLAREGISTROS (IDREGISTRO, FECHA_RADICACION, RADICADO)
    SELECT * FROM TABLADOCUMENTOS
    SET IDENTITY_INSERT dbo.TablaRegistros OFF
    GO
    SELECT * fROM TABLAREGISTROS
    

    Y lo mismo para la otra tabla.

    lunes, 16 de diciembre de 2019 22:02
  • Gracias por la respuesta 

    Esa es una opción valida y la tenia contemplada pero quisiera saber si hay alguna otra alternativa dado que se quiere mantener el orden de los identity en la nueva base de datos

    Gracias   


    Wilmar G

    lunes, 16 de diciembre de 2019 22:06
  • Efectivamente es lo que hace cuando deshabilita la propiedad SET IDENTITY OFF como se muestra aqui

    SET IDENTITY_INSERT dbo.TablaRegistros OFF

    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    lunes, 16 de diciembre de 2019 22:28
  • Hola Wilmar Garzón:

    Añadiendo otra columna para que mantenga la relación.

    CREATE TABLE TABLADOCUMENTOS (IDDOC INT, FECHA_RADICACION DATETIME, RADICADO VARCHAR(100))
    CREATE TABLE TABLAREGISTROS (IDREGISTRO INT IDENTITY(1,1), FECHA_RADICACION DATETIME, RADICADO VARCHAR(100), idDOC INT)
    GO
    INSERT INTO TABLADOCUMENTOS (IDDOC, FECHA_RADICACION, RADICADO)
    VALUES
    (12,'20151111 08:10:23.280','R-2015-000001'),
    (13,'20151111 08:11:28.977','R-2015-000002'),
    (14,'20151111 08:10:23.280','R-2015-000003'),
    (15,'20151111 08:10:23.280','R-2015-000004'),
    (16,'20151111 08:10:23.280','R-2015-000005'),
    (17,'20151111 08:10:23.280','R-2015-000006'),
    (18,'20151111 08:36:15.047','R-2015-000007'),
    (19,'20151111 08:36:15.047','R-2015-000008'),
    (20,'20151111 08:36:15.047','R-2015-000009'),
    (21,'20151111 08:10:23.280','R-2015-000010');
    GO
    INSERT INTO TABLAREGISTROS (FECHA_RADICACION, RADICADO, IDDOC)
    
    SELECT 
           T.FECHA_RADICACION
         , T.RADICADO
    	 , T.IDDOC
    FROM TABLADOCUMENTOS T;
    
    GO
    SELECT * fROM TABLAREGISTROS
    

    Cuando realizas el insert, Sql server valida que para cada columna por el nombre que le has definido después de insert, entra el tipo de dato, que le envías en la select.

    En este caso, dejamos el identity que vaya solo, y seleccionamos, la fecha, radicación y el idDoc de su tabla original.

    Además puedes mantener después la integridad referencial añadiendo el correspondiente

    ALTER TABLE TABLAREGISTROS
    ADD CONSTRAINT FK_TABLAREGISTROS_MOVIMIENTO FOREIGN KEY (IDDOC) REFERENCES TABLAREGISTRO_MOVIMIENTO (IDDOC);

    • Marcado como respuesta Wilmar Garzón martes, 17 de diciembre de 2019 14:11
    martes, 17 de diciembre de 2019 6:43
  • Hola

    No entiendo, usted habla de una MIGRACION y cuando se toca este tema se dice que va a ser de una version a otra (superior o inferior), ¿Esta en realidad MIGRANDO su base de datos?


    IIslas Master Consultant SQL Server

    martes, 17 de diciembre de 2019 18:00
  • Hola se quiere migrar de una versión inferior a una superior

    Wilmar G

    martes, 17 de diciembre de 2019 18:04