none
Insertar en una tabla cuando los datos no existan en otra tabla RRS feed

  • Pregunta

  • Que tal tengo la siguiente consulta en la cual inserto los datos de una tabla en otra tabla en distinto servidor para lo cual cree servidores vinculados. Funciona bien pero ahora quiero insertar solo los datos que no existan en la base de destino, osea que no me inserte registros duplicados ¿Existe alguna manera? De momento tengo lo siguiente:

    INSERT INTO [DIRECCION-PC].dbsavTezontepec.dbo.tFacturaEmitida (alm_Clave, femi_Clave, cli_RFC, cli_CURP, cli_NombreFis, 
    	cli_CalleFis, cli_InteriorFis, cli_ExteriorFis, cli_ColoniaFis, cli_DelMunFis, cli_CiudadFis, cli_EstadoFis, cli_PaisFis,
    	cli_CPFis, femi_Fecha, femi_Importe, femi_IVA, femi_Total, femi_FecReg, usu_ClaveReg, femi_FecMod, usu_ClaveMod, prog_Clave,
    	CLI_CLAVE, femi_descuento, femi_Precio, femi_Nota, tfact_Clave, efemi_clave, efol_serie, efol_folio, efol_Aprobacion, 
    	efol_Anio, efol_Fecha, femi_CadenaOriginal, femi_SelloDigital, femi_selloSAT, femi_noCertificadoSAT, femi_FechaTimbrado,
    	femi_UUID, femi_Version, femi_TimbreFiscalDigital, femi_MetodoPago, cli_email, femi_CuentaPago, efol_Total, tcomp_Clave,
    	femi_CadenaCFD, fpago_Clave, femi_FolioOriginal, femi_SerieOriginal, femi_FechaFolioOriginal, femi_MontoFolioOriginal,
    	femi_formaDePago, femi_CondicionesDePago, femi_Parcialidad, femi_Parcialidades, femi_MotivoDescuento, femi_IVARetenido,
    	femi_ISRRetenido, femi_Impuestos, femi_Retenciones, femi_Neto, femi_IEPS)
    SELECT alm_Clave, femi_Clave, cli_RFC, cli_CURP, cli_NombreFis, 
    	cli_CalleFis, cli_InteriorFis, cli_ExteriorFis, cli_ColoniaFis, cli_DelMunFis, cli_CiudadFis, cli_EstadoFis, cli_PaisFis,
    	cli_CPFis, femi_Fecha, femi_Importe, femi_IVA, femi_Total, femi_FecReg, usu_ClaveReg, femi_FecMod, usu_ClaveMod, prog_Clave,
    	CLI_CLAVE, femi_descuento, femi_Precio, femi_Nota, tfact_Clave, efemi_clave, efol_serie, efol_folio, efol_Aprobacion, 
    	efol_Anio, efol_Fecha, femi_CadenaOriginal, femi_SelloDigital, femi_selloSAT, femi_noCertificadoSAT, femi_FechaTimbrado,
    	femi_UUID, femi_Version, femi_TimbreFiscalDigital, femi_MetodoPago, cli_email, femi_CuentaPago, efol_Total, tcomp_Clave,
    	femi_CadenaCFD, fpago_Clave, femi_FolioOriginal, femi_SerieOriginal, femi_FechaFolioOriginal, femi_MontoFolioOriginal,
    	femi_formaDePago, femi_CondicionesDePago, femi_Parcialidad, femi_Parcialidades, femi_MotivoDescuento, femi_IVARetenido,
    	femi_ISRRetenido, femi_Impuestos, femi_Retenciones, femi_Neto, femi_IEPS FROM dbo.tFacturaEmitida
    Espero puedan ayudarme


    martes, 23 de agosto de 2016 22:49

Respuestas

  • Gspindola,

    ¿Cómo adviertes que una fila ya existe? ¿Has identificado alguna columna que distinga a una fila de otra? ¿Quizá la columna [cli_CURP]?

    En caso la columna [cli_CURP] identifique una fila debes de restringir la inserción validando la existencia del valor en la tabla destino de la inserción, por ejemplo:

    INSERT INTO TablaRemota
    SELECT
            t.cli_CURP,
            t.Col1,
            t.Col2,
            t.Col3,
    FROM
            TablaLocal t
    WHERE
            NOT EXISTS (SELECT 1 FROM TablaRemota WHERE (t.cli_CURP = cli_CURP));

    En caso las columnas que distingan a una fila sean mas de una entonces debes de nombrarlas en la expresión de filtro de la sub-consulta.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Edu Martinez jueves, 25 de agosto de 2016 0:03
    • Marcado como respuesta Gspindola jueves, 25 de agosto de 2016 19:48
    martes, 23 de agosto de 2016 23:39

Todas las respuestas

  • Gspindola,

    ¿Cómo adviertes que una fila ya existe? ¿Has identificado alguna columna que distinga a una fila de otra? ¿Quizá la columna [cli_CURP]?

    En caso la columna [cli_CURP] identifique una fila debes de restringir la inserción validando la existencia del valor en la tabla destino de la inserción, por ejemplo:

    INSERT INTO TablaRemota
    SELECT
            t.cli_CURP,
            t.Col1,
            t.Col2,
            t.Col3,
    FROM
            TablaLocal t
    WHERE
            NOT EXISTS (SELECT 1 FROM TablaRemota WHERE (t.cli_CURP = cli_CURP));

    En caso las columnas que distingan a una fila sean mas de una entonces debes de nombrarlas en la expresión de filtro de la sub-consulta.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Edu Martinez jueves, 25 de agosto de 2016 0:03
    • Marcado como respuesta Gspindola jueves, 25 de agosto de 2016 19:48
    martes, 23 de agosto de 2016 23:39
  • Gracias por tu ayuda Willams Morales
    jueves, 25 de agosto de 2016 19:48