Aquí nuevamente, intentando molestar en unas de mis "pequeñas" dudas en las que todos conocen que si las hago publicar para recibir otra visión de otros ojos o posibles soluciones, es por que probablemente haya leído X documentanción antes en Red y en el Foro.
Pero vaya.... Vayamos al grano para no fatigar más el tema.
El propósito que intento consignar, es conseguir alguna variante o alternativa para la función EXCEPT del SQL Server. La misma funciona perfectamente, pero para coger los resultados, me es un poco dificultoso, y usar WITH CTE, me afecta bastante el rendimiento. Me parece muy lento para trabajar siempre con unas 200 mil filas. Lo realicé, pero buscaría algo más óptimo o el lado correcto.
Sé que existen los mecanismos NOT IN, NOT EXISTS, LEFT OUTER JOIN, pero veamos, al parecer (o bajo mi criterio) que este no es el caso. Por que poseo 4 claves primarias, y por 1, pueden existir más líneas de diferencias. Así que mi comparación tiende a ser por 4 ID's y no por 1.
Ejemplo:
Código SQL:
Ver original
ID_HOTEL ID_SERIE NRO_RESERVA ID_PERIODO ID_LINEA 1 YAAA 220000 1 1 1 YAAA 220000 1 2 1 YAAA 220000 1 3 2 ZAAA 150000 1 1 2 ZAAA 150000 1 2
Ahora, como poseo 2 tablas idénticas en otra DB, que sería como la central, necesito manipular información de ambas, y tienen que estar siempre actualizadas (sincronizadas).
Para ello, mediante un TRIGGER quisiera mostrar las diferencias o faltantes, y luego enviarlas, actualizarlas o borrar e insertar.
El caso está que en la otra tabla, si poseo esto:
Código SQL:
Ver original
ID_HOTEL ID_SERIE NRO_RESERVA ID_PERIODO ID_LINEA 1 YAAA 220000 1 1 1 YAAA 220000 1 2 2 ZAAA 150000 1 1 2 ZAAA 150000 1 2
Al realizar un EXCEPT desde la A, me devolverá el siguiente registro:
Código SQL:
Ver original
1 YAAA 220000 1 3
Y funciona perfecto. Veamos, pero esta es una diferencia de cantidad de líneas. Pero ¿Qué pasa si otro campo NO PRIMARY ha sido modificado?
El EXCEPT además me compara las diferencias de líneas, y filas que se encuentren con campos disparejos, y es excelente por que también es lo que busco.
Pero ¿Como cojo la consulta del EXCEPT, para luego insertar o manipular lo que arroje? Mediante un WITH, y ahí me baso comparando las SERIES, pero me retorna bastante lento.
O la alternativa es para el EXCEPT, o para el WITH. Sea por que uno sea lento en arrojar resultados y mantenerlos (forma temporal), o el otro sea dificultoso coger su respuesta.
Probé con NOT IN, o NOT EXISTS, y me arroja solo LAS QUE NO EXISTAN. Pero es que si existen, pero de diferencia en algún campo, o líneas demás.
Sin más que agregar;
Si alguno posee alguna posible resolución del concepto. Estaría agradecido nuevamente.
Saludos para todos.