Поделиться через


sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Возвращает регистрационный номер транзакции в журнале (номер LSN) из столбца start_lsn системной таблицы cdc.lsn_time_mapping за указанное время. Эту функцию можно использовать для систематического сопоставления диапазона типа данных datetime диапазону номеров LSN, необходимому для функций перечисления системы отслеживания измененных данных cdc.fn_cdc_get_all_changes_<capture_instance> и cdc.fn_cdc_get_net_changes_<capture_instance>, чтобы возвратить изменения данных в этом диапазоне.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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
}

Аргументы

  • '<оператор_отношения>' { largest less than | largest less than or equal | smallest greater than | smallest greater than or equal }
    Используется для идентификации уникального номера LSN в таблице cdc.lsn_time_mapping со связанным значением tran_end_time, которое удовлетворяет связи при сравнении со значением tracking_time.

    Аргумент relational_operator имеет тип nvarchar(30).

  • tracking_time
    Значение типа datetime для сопоставления. Аргумент tracking_time имеет тип datetime.

Тип возвращаемых данных

binary(10)

Замечания

Чтобы понять, как функция sys.fn_cdc_map_time_lsn может использоваться для сопоставления диапазона типа данных datetime диапазону номеров LSN, рассмотрим следующий случай. Предположим, что потребителю нужно получать изменения данных ежедневно. То есть потребителю нужны изменения только за определенные сутки. Нижней границей диапазона будет полночь предыдущего дня, не входя в диапазон. Верхней границей будет полночь заданного дня. В следующем примере показано, как функция sys.fn_cdc_map_time_to_lsn может использоваться для систематического сопоставления этого диапазона, основанного на времени, с диапазоном, основанным на номерах LSN, необходимого для функций перечисления системы отслеживания измененных данных, чтобы они возвращали все изменения данных в этом диапазоне.

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');

Оператор отношения 'smallest greater than' используется для ограничения изменений теми, которые произошли после полуночи предыдущего дня. Если несколько записей с разными значениями LSN имеют общее значение tran_end_time, определенное в качестве нижней границы в таблице cdc.lsn_time_mapping, функция возвратит наименьший номер LSN, обеспечивая включение в диапазон всех записей. Для верхней границы используется оператор отношения 'largest less than or equal to', чтобы обеспечить включение в диапазон всех записей для определенного дня, включая те, значения tran_end_time которых равны полуночи. Если несколько записей с разными значениями LSN имеют общее значение tran_end_time, определенное в качестве верхней границы, функция возвратит наибольший номер LSN, обеспечивая включение в диапазон всех записей.

Разрешения

Необходимо быть членом роли public.

Примеры

В следующем примере с помощью функции sys.fn_cdc_map_time_lsn определяется, имеются ли в таблице cdc.lsn_time_mapping строки со значением tran_end_time, большим или равным полуночи. Запрос может применяться, например, для определения того, обработал ли процесс отслеживания изменения, зафиксированные до полуночи предыдущего дня, чтобы продолжить извлечение данных изменений для этого дня.

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