sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Se aplica a:SQL Server

Devuelve el valor del número de secuencia de registro (LSN) de la start_lsn columna de la tabla del sistema cdc.lsn_time_mapping para la hora especificada. Puede usar esta función para asignar sistemáticamente intervalos de fecha y hora al intervalo basado en LSN necesario para 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 cambios de datos dentro de ese intervalo.

Convenciones 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>' { mayor que | mayor menor o igual que | menor que | menor mayor que | menor mayor o igual que }

Se usa para identificar un valor LSN distinto en dentro de la cdc.lsn_time_mapping tabla con un asociado tran_end_time que satisface la relación en comparación con el valor de tracking_time .

relational_operator es nvarchar(30).

tracking_time

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

Tipo de valor devuelto

binary(10)

Comentarios

Para comprender cómo se puede usar la sys.fn_cdc_map_time_to_lsn función para asignar intervalos de fecha y hora a intervalos LSN, tenga en cuenta el siguiente escenario.

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 basado en tiempo al intervalo basado en LSN necesario para que las funciones de enumeración de captura de datos modificados devuelvan todos los cambios dentro de ese 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 smallest greater than relacional se usa para restringir los cambios a los que se produjeron después de medianoche en el día anterior. Si varias entradas con valores LSN diferentes comparten el tran_end_time valor identificado como el límite inferior de la tabla cdc.lsn_time_mapping , la función devolverá el LSN más pequeño, lo que garantiza que se incluyan todas las entradas. Para el límite superior, el operador largest less than or equal to relacional se usa para asegurarse de que el intervalo incluye todas las entradas del día, incluidas las que tienen medianoche como su tran_end_time valor. Si varias entradas con valores LSN diferentes comparten el tran_end_time valor identificado como límite superior, la función devolverá el LSN más grande asegurándose de que se incluyen todas las entradas.

Permisos

Debe pertenecer al rol public .

Ejemplos

En el ejemplo siguiente se usa la sys.fn_cdc_map_time_to_lsn función para determinar si hay filas en la tabla cdc.lsn_time_mapping con un tran_end_time valor mayor o igual que la medianoche. 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

Consulte también