Ver Mensaje Individual
  #9 (permalink)  
Antiguo 11/05/2017, 13:31
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cómo puedo comprobar si hay duplicados antes de insertarlos

Ahi ya son 2 casos diferentes, uno es para cuando los repetidos vienen en la 1er tabla y el segundo es cuando ya tienes datos en la segunda tabla, para eso podriamos hacer esto:

Código SQL:
Ver original
  1. CREATE TABLE #Aux
  2.     (
  3.         Id       INT IDENTITY(1,1)
  4.        ,Nombre   VARCHAR(50)
  5.        ,Apellido VARCHAR(50)
  6.        ,Dni      INT
  7.     )
  8.    
  9.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  10.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  11.     INSERT INTO #Aux VALUES ('Gabriela', 'Romero', 73345);
  12.     INSERT INTO #Aux VALUES ('Juan', 'Claros', 12345);
  13.     INSERT INTO #Aux VALUES ('Alejandro', 'Gonzales', 80315);
  14.     INSERT INTO #Aux VALUES ('Pedro', 'Caceres', 82315);
  15.        
  16.     CREATE TABLE #Aux1
  17.     (
  18.         Id       INT IDENTITY(1,1)
  19.        ,Nombre   VARCHAR(50)
  20.        ,Apellido VARCHAR(50)
  21.        ,Dni      INT
  22.     )
  23.  
  24.  
  25.     INSERT INTO #Aux1          
  26. SELECT nombre, apellido, dni FROM(         
  27.            SELECT A.Nombre
  28.                  ,A.Apellido
  29.                  ,A.Dni, ROW_NUMBER() OVER(partition BY a.nombre,a.apellido, a.dni ORDER BY a.nombre,a.apellido, a.dni) AS rn
  30.            FROM #Aux A
  31.            LEFT JOIN #aux1 AS B ON (a.nombre=b.nombre AND a.Apellido=b.Apellido AND a.Dni=b.Dni)
  32.            WHERE b.nombre IS NULL AND b.Apellido IS NULL AND b.dni IS NULL
  33.   ) AS t1 WHERE rn=1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me