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


sys.fn_cdc_increment_lsn (Transact-SQL)

Применимо к:SQL Server

Возвращает следующий регистрационный номер транзакции в журнале (LSN) в последовательности относительно указанного номера.

Соглашения о синтаксисе Transact-SQL

Синтаксис

  
sys.fn_cdc_increment_lsn ( lsn_value )  

Аргументы

lsn_value

Значение LSN. lsn_value является двоичным(10).

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

binary(10)

Замечания

Номер LSN, возвращаемый функцией, всегда больше заданного значения. Между указанными двумя значениями не может быть промежуточных номеров LSN.

Для систематического отображения информации об изменениях данных с течением времени можно периодически вызывать функцию запроса, каждый раз указывая новые значения границ интервала. Чтобы исключить потерю данных, необходимо в качестве нижней границы последующего запроса использовать верхнюю границу предыдущего запроса. Так как интервал запроса является замкнутым, то новое значение нижней границы должно быть больше, чем значение верхней границы предыдущего запроса. Однако необходимо убедиться, что разница между указанными значениями границ достаточно мала и не включает номеров LSN каких-либо изменений. Функция sys.fn_cdc_increment_lsn используется для получения этого значения.

Разрешения

Требуется членство в роли общедоступной базы данных.

Примеры

В следующем примере новое значение нижней границы интервала системы отслеживания измененных данных формируется с помощью функции sys.fn_cdc_increment_lsn. При этом используется значение верхней границы предыдущего запроса, а результат записывается в переменную @save_to_lsn.

USE AdventureWorks2022;  
GO  
DECLARE @from_lsn binary(10), @to_lsn binary(10), @save_to_lsn binary(10);  
SET @save_to_lsn = <previous_upper_bound_value>;  
SET @from_lsn = sys.fn_cdc_increment_lsn(@save_to_lsn);  
SET @to_lsn = sys.fn_cdc_get_max_lsn();  
SELECT * from cdc.fn_cdc_get_all_changes_HumanResources_Employee( @from_lsn, @to_lsn, 'all' );  
GO  

Заметка

Ошибка 313 ожидается, если диапазон LSN не подходит при вызове cdc.fn_cdc_get_all_changes_<capture_instance> или cdc.fn_cdc_get_net_changes_<capture_instance>. lsn_value Если параметр выходит за пределы времени наименьшего LSN или самого высокого LSN, выполнение этих функций возвращается в ошибке 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function Эта ошибка должна быть обработана разработчиком. Пример T-SQL для обходного решения можно найти в ReplTalk на сайте GitHub.

См. также