none
Ayuda con Una inserccion a una tabla RRS feed

  • Pregunta

  • Hola a Todos

    Quiero hacer una inserción de datos a una tabla que esta en otra base de datos, pero lo debo hacer con cierta condición.

    Prepare un Ejemplo para explicar.


    Tabla1 (DB 1)

    Codigo,Nombre,Numero

    A20  Pedro  200

    A50 Juan 205

    Tabla2: (DB 2)

    Codigo,Nombre,Sexo,Edad,etc,etc,

    A20  Pedro  M  30,......

    A50  Juan  M  60,..........

    A55  Marcela F  26,........

    A60 Jorge  M  38,.....

    Necesito insertar datos a la Tabla1, en esta tabla existe un campo Numero, este es un campo único, que no se repite y lleva una secuencia(no es campo llave).  Ocupo insertar datos de la Tabla2 a la Tabla1 obteniendo el valor Max(Numero)+1

    El problema es que no se como hacer para que este numero se vaya incrementando al momento de insertar las lineas de la Tabla2

    lunes, 9 de julio de 2018 21:43

Respuestas

  • Se me ocurre que podrías usar row_number para numerar los registros que sacas de la tabla 2, y sumarle a ese valor el Max de la tabla 1:

    Insert into tabla1(Codigo, Nombre, Numero) Select Codigo, Nombre, (select Max(numero) from tabla1)+Row_number() over (order by Codigo) from tabla2

    • Marcado como respuesta CAHSA martes, 17 de julio de 2018 20:50
    martes, 10 de julio de 2018 5:27

Todas las respuestas

  • Se me ocurre que podrías usar row_number para numerar los registros que sacas de la tabla 2, y sumarle a ese valor el Max de la tabla 1:

    Insert into tabla1(Codigo, Nombre, Numero) Select Codigo, Nombre, (select Max(numero) from tabla1)+Row_number() over (order by Codigo) from tabla2

    • Marcado como respuesta CAHSA martes, 17 de julio de 2018 20:50
    martes, 10 de julio de 2018 5:27
  • Un código parecido, quizá algo menos sencillo pero en pasos para que se entienda puede ser este

    with t2 as (
    select ROW_NUMBER() over (order by codigo) fila, Codigo,nombre,sexo,edad,et et from tabla2)
    , maximum as (select max(numero) num from tabla1)
    , tderived as ( select fila+(select max(num) from maximum),codigo,nombre,sexo,edad from t2)
    insert into t1 select * from tderived

    la tabla t2 añade el número de fila, 

    la tabla máximum el número actual de t1

    tderived suma y por ultimo hago la inserción. 

    El código de alberto es más directo, pero por si necesitabas una explicación mas detallada.....


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 10 de julio de 2018 6:33
    Moderador
  • Muchas Gracias Alberto, esto me funciono de Maravilla.

    Saludos y Gracias nuevamente.

    martes, 17 de julio de 2018 20:50