none
INSERTAR VARIOS REGISTROS SOLO SI NO EXISTEN EN SQL SERVER 2012 RRS feed

  • Pregunta

  • Que tal a todos , quiero realizar una insercion de varios registros de una tabla a otro con un query pero quiero validar primero que no existan los registros en la tabla en la que los insertare , alguno sabra de laguna funcion que me ayude a hacer esto 

    ya que quiero que valide en automatico todos los registros de un select y que inserte todos los que no existen

    saludos , espero me puedan orientar

    lunes, 8 de agosto de 2016 18:00

Respuestas

  • Saludos

    La sentencia Merge puede hacer las veces de un insert o update o sin el update depende de como la programer es conocida como upsert en mysql pero un poco mas flexible, por favor ten en  cuenta que no es la función mas optima.

    https://msdn.microsoft.com/en-us/library/bb510625.aspx

    lunes, 8 de agosto de 2016 18:02
  • gracias no e usado la de if exist pero no se que me puedan decir de esta funcion me sirve o que complicaciones puedo tener ?

    ujanM,

    No veo complicaciones, fíjate en el siguiente ejemplo como puedes plantear la operación:

    DECLARE @Seccion nvarchar(100) = 'SQL Server';
    INSERT INTO SeccionesForo (idSeccion, Seccion)
    SELECT
            (1, @Seccion)
    WHERE
            NOT EXISTS (SELECT 1 FROM SeccionesForo WHERE (Seccion = @Seccion));
    

    Se realizará la inserción únicamente cuando no exista el valor en la tabla.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 9 de agosto de 2016 0:21

Todas las respuestas

  • Saludos

    La sentencia Merge puede hacer las veces de un insert o update o sin el update depende de como la programer es conocida como upsert en mysql pero un poco mas flexible, por favor ten en  cuenta que no es la función mas optima.

    https://msdn.microsoft.com/en-us/library/bb510625.aspx

    lunes, 8 de agosto de 2016 18:02
  • Efectivamente como te comenta Enrique existe la instruccion MERGE, de hecho por mi experiencia esta es una sentencia optima para este tipo de escenarios, de hecho resulta optima en el sentido que no tienes que diseñar otras instrucciones independientes y comprobaciones explicitas.

    Solo un comentario, esta instrucción esta disponible desde la versión 2008.


    "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, 8 de agosto de 2016 18:15
  • gracias no e usado la de if exist pero no se que me puedan decir de esta funcion me sirve o que complicaciones puedo tener ?
    lunes, 8 de agosto de 2016 20:11
  • Por lo general esa sentencia (if exists) la uso para comprobar que existan filas en una tabla destino o que existe un objeto, pero te invito a revisar la documentación de la instrucción MERGE.

    "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, 8 de agosto de 2016 20:36
  • ok gracias
    lunes, 8 de agosto de 2016 21:45
  • gracias no e usado la de if exist pero no se que me puedan decir de esta funcion me sirve o que complicaciones puedo tener ?

    ujanM,

    No veo complicaciones, fíjate en el siguiente ejemplo como puedes plantear la operación:

    DECLARE @Seccion nvarchar(100) = 'SQL Server';
    INSERT INTO SeccionesForo (idSeccion, Seccion)
    SELECT
            (1, @Seccion)
    WHERE
            NOT EXISTS (SELECT 1 FROM SeccionesForo WHERE (Seccion = @Seccion));
    

    Se realizará la inserción únicamente cuando no exista el valor en la tabla.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 9 de agosto de 2016 0:21