Si la fuente es solo de inserción, dele una IDENTITY
columna. Cuando realiza la transferencia de datos, registra el valor más alto escrito. Durante la próxima transferencia, solo necesita consultar valores mayores que los registrados durante la transferencia anterior. Hacemos esto para transferir registros de registros a un almacén de datos.
Para filas actualizables, agregue una bandera "sucia". Tendrá tres valores: limpio, sucio y eliminado. Las consultas del día a día tendrán que omitir filas con el indicador establecido en "eliminado". Esto será costoso en mantenimiento, pruebas y tiempo de ejecución. Después de la consulta grande, debe mencionar que todas las filas marcadas para eliminar deben eliminarse y restablecer el marcador para todas las demás. Esto no escalará bien.
Una alternativa más ligera a Change Data Capture es Change Tracking . No le dirá qué valores cambiaron, solo que la fila ha cambiado desde la última consulta. Las funciones integradas facilitan la recuperación de los valores modificados y la gestión del seguimiento. Hemos tenido éxito al usar CT para procesar aproximadamente 100,000 cambios por día en una tabla de 100,000,000 filas.
Las notificaciones de consulta siguen actuando en una palanca más alta, al nivel de un conjunto de resultados. Conceptualmente, es como definir una vista. Si SQL Server detecta que cualquier fila devuelta a través de esa vista ha cambiado, envía un mensaje a la aplicación. No hay indicación de cuántas filas cambiaron o qué columnas. Solo hay mensajes simples que dicen "algo sucedió". Depende de la aplicación preguntar y reaccionar. Prácticamente es mucho más complejo que eso, como te puedes imaginar. Existen restricciones sobre cómo se puede definir la consulta y la notificación puede activarse por condiciones que no sean datos modificados. Cuando se activa la notificación, se elimina. Si posteriormente se realiza una actividad de interés adicional, no se enviará ningún otro mensaje.
En el contexto de la pregunta del OP, QN tendrá la ventaja de tener una sobrecarga baja para configurar y un bajo costo de tiempo de ejecución. Puede ser un esfuerzo significativo establecer y mantener un riguroso régimen de suscripción-mensaje-reacción. Dado que la tabla de datos es grande, es probable que haya cambios frecuentes en ella, lo que significa que es probable que la notificación se active en la mayoría de los ciclos de procesamiento. Como no hay indicación de lo que cambió, el procesamiento incremental de los deltas no será posible, como lo haría con CT o CDC. La sobrecarga debida a la activación falsa es una tarea tediosa, pero incluso en el peor de los casos, la consulta costosa no necesita ejecutarse con más frecuencia de lo que es actualmente.