Share via


sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Devuelve el valor del número de secuencia de registro (LSN) desde la columna start_lsn en la tabla del sistema cdc.lsn_time_mapping para la fecha y hora especificadas. Puede usar esta función para asignar sistemáticamente los intervalos de fecha y hora en el intervalo basado en LSN que necesitan las funciones de enumeración de captura de datos modificados cdc.fn_cdc_get_all_changes_<capture_instance> y cdc.fn_cdc_get_net_changes_<capture_instance> para devolver los cambios de los datos dentro de dicho intervalo.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sys.fn_cdc_map_time_to_lsn ('<relational_operator>', tracking_time )

<relational_operator> ::=
{  largest less than
 | largest less than or equal
 | smallest greater than
 | smallest greater than or equal
}

Argumentos

  • '<relational_operator>' { más grande menor que | más grande menor o igual que | más pequeño mayor que | más pequeño mayor o igual que }
    Se usa para identificar un valor de LSN distinto dentro de la tabla cdc.lsn_time_mapping con un valor tran_end_time asociado que satisfaga la relación cuando se compara con el valor de tracking_time.

    relational_operator es de tipo nvarchar(30).

  • tracking_time
    Es el valor de fecha y hora con el que se hará la comparación. tracking_time es de tipo datetime.

Tipo devuelto

binary(10)

Comentarios

Para saber cómo se debe usar el valor sys.fn_cdc_map_time_lsn para asignar los intervalos de fecha y hora a los intervalos de LSN, analice el escenario siguiente. Suponga que un consumidor desea extraer los datos de cambios cada día. Es decir, el consumidor solo desea obtener los cambios que se han realizado durante un día determinado hasta la medianoche incluida. El límite inferior del intervalo temporal sería hasta las doce de la noche (no inclusive) del día anterior. El límite superior sería hasta las doce de la noche (inclusive) del día en cuestión. En el ejemplo siguiente se muestra cómo se puede usar la función sys.fn_cdc_map_time_to_lsn para asignar sistemáticamente este intervalo horario en el intervalo basado en LSN que necesitan las funciones de enumeración de captura de datos modificados para devolver todos los cambios dentro de dicho intervalo.

DECLARE @begin_time datetime, @end_time datetime, @begin_lsn binary(10), @end_lsn binary(10);

SET @begin_time = '2007-01-01 12:00:00.000';

SET @end_time = '2007-01-02 12:00:00.000';

SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);

SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);

SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all');

El operador relacional 'smallest greater than' se usa para restringir los cambios a los que se han producido después de las doce de la noche del día anterior. Si varias entradas con valores de LSN diferentes comparten el valor tran_end_time identificado como límite inferior en la tabla cdc.lsn_time_mapping, la función devolverá el LSN más pequeño de modo que todas las entradas estén incluidas. Para el límite superior, el operador relacional 'largest less than or equal to' se usa para garantizar que el intervalo incluye todas las entradas del día incluidas las que tienen las doce de la noche como valor tran_end_time. Si varias entradas con valores de LSN diferentes comparten el valor tran_end_time identificado como límite superior, la función devolverá el LSN más grande de modo que todas las entradas estén incluidas.

Permisos

Debe pertenecer al rol public.

Ejemplos

En el ejemplo siguiente se usa la función sys.fn_cdc_map_time_lsn para determinar si existen filas en la tabla cdc.lsn_time_mapping con un valor tran_end_time mayor o igual que las doce de la noche. Esta consulta se puede usar para determinar, por ejemplo, si el proceso captura ya ha procesado los cambios confirmados hasta las doce de la noche del día anterior, para que la extracción de los datos cambiados durante ese día pueda llevarse a cabo.

DECLARE @extraction_time datetime, @lsn binary(10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn ('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END