Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Query para encontrar datos existentes en 2 instancias remotas

Estas en el tema de Query para encontrar datos existentes en 2 instancias remotas en el foro de SQL Server en Foros del Web. Saludos terrícolas! Vuelvo por aquí por un tema de subconsultas. Tengo la necesidad de encontrar datos que estén en un servidor de BD pero que ...
  #1 (permalink)  
Antiguo 16/07/2012, 14:49
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 10 meses
Puntos: 1
Query para encontrar datos existentes en 2 instancias remotas

Saludos terrícolas!

Vuelvo por aquí por un tema de subconsultas. Tengo la necesidad de encontrar datos que estén en un servidor de BD pero que NO SE ENCUENTREN en otro.

En principio, he estado implementando NOT EXISTS e IN inclusive (esta última con cierto recelo por el tiempo que dura). Pero no he tenido éxito.

Les agradezco desde ya su atención a este post
  #2 (permalink)  
Antiguo 16/07/2012, 15:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Query para encontrar datos existentes en 2 instancias remotas

select * from tabla1
left join tabla 2 on (id1=id2)
where id2 is null


asi sacas los que esten en un lado y no en el otro :) (en este caso los que estan en tabla 1 pero no estan en tabla2)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/07/2012, 15:28
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Query para encontrar datos existentes en 2 instancias remotas

Muchas gracias por responder Libras

Te comento, al ejecutar la consulta llegó al tiempo de 10 minutos sin darme ningún resultado por lo que tuve que cancelar. El volumen de información no es tan extenso como para llegar a esa marca.

Así que sigo probando otra solución.. Qué más podría hacer?
  #4 (permalink)  
Antiguo 16/07/2012, 16:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Query para encontrar datos existentes en 2 instancias remotas

acorta tus datos en el where.........estas filtrando bien en tu join?

Código SQL:
Ver original
  1. CREATE TABLE #temp1
  2. (
  3. id INT
  4. )
  5.  
  6. CREATE TABLE #temp2
  7. (
  8. id INT
  9. )
  10.  
  11.  
  12. INSERT INTO #temp1 VALUES (1)
  13. INSERT INTO #temp1 VALUES (2)
  14. INSERT INTO #temp1 VALUES (3)
  15. INSERT INTO #temp1 VALUES (4)
  16.  
  17. INSERT INTO #temp2 VALUES (1)
  18. INSERT INTO #temp2 VALUES (1)
  19. INSERT INTO #temp2 VALUES (5)
  20. INSERT INTO #temp2 VALUES (6)
  21.  
  22. SELECT * FROM #temp1 AS t1
  23. LEFT JOIN #temp2 AS t2 ON (t1.id=t2.id)
  24. WHERE t2.id IS NULL

el resultado de esta consulta es 2,3,4 que son los que no estan en #temp2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 16/07/2012 a las 16:15
  #5 (permalink)  
Antiguo 16/07/2012, 16:39
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Query para encontrar datos existentes en 2 instancias remotas

Identifiqué mi problema. Los IDs que de una tabla no son los mismos IDs de la otra por lo que el LEFT JOIN nunca me iba a a entregar datos si los comparaba entre sí.

Afortundamente, ubiqué otro atributo (columna) con el que pude hacer comparación y me remití al uso del NOT IN, que no llega a durar ni 10 segundos, un tiempo prudente tomando en cuenta que son dos servidores diferentes.

Como estoy acostumbrado dejo el código que me permitió avanzar

Código SQL:
Ver original
  1. --Aclaro que trabajo en SQL Server 2005, razón por la cual hago uso de estas
  2. --conversiones de fechas
  3. SELECT *
  4. FROM servidortransaccional.bd.dbo.factura AS factura
  5. WHERE factura.FECHA>=CONVERT(DATETIME, 'YYYY-MM-DD', 102)
  6. AND
  7. factura.FECHA<=CONVERT(DATETIME, 'YYYY-MM-DD', 102)
  8. AND
  9. MICAMPO NOT IN
  10.     (SELECT MICAMPO
  11.     FROM servidorcentral.bd.dbo.facturas AS fact
  12.     WHERE FECHA=CONVERT(DATETIME, 'YYYY-MM-DD', 102) AND FACTSERIE='numeroserie')
  13. ORDER BY FECHA

Y gracias miles de nuevo Libras por guiarme
  #6 (permalink)  
Antiguo 17/07/2012, 23:02
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Información Respuesta: Query para encontrar datos existentes en 2 instancias remotas

Yo utlizaria el operador Except:
Código:
Select   *
From     MiTabla1
Except
Select   *
From     MiTabla2;
Sin embargo- tambien con los operadores Exist, Join e In deberias encontrar la resta entre las tablas, a menos que hay nulos (Null) en ambas tablas.

Edición: solamente ahora he visto tu ultimo mensaje.
Intenta si hay nulos en MiCampo (en ambos servidores): el operador Not In combinado con nulos te devuelve resultados que no son correctos.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Última edición por GeriReshef; 17/07/2012 a las 23:08
  #7 (permalink)  
Antiguo 19/07/2012, 07:25
Avatar de Erick_Lucas  
Fecha de Ingreso: enero-2009
Ubicación: Manta
Mensajes: 47
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Query para encontrar datos existentes en 2 instancias remotas

Hola GeriReshef, afortundamente no existen valores nulos en ninguno de los dos servidores. Pero gracias, he de tomar en cuenta esa consideración para las próximas consultas con NOT IN.

Saludos!

Etiquetas: encontrar, existentes, instancias, query, remotas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:01.