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


<cdc.fn_cdc_get_all_changes_capture_instance> (Transact-SQL)

Область применения:SQL Server

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

Параметры фильтрации строк управляют содержимым столбцов метаданных и строк, возвращаемых в результирующем наборе. Если указан параметр фильтра всех строк, каждое изменение имеет ровно одну строку для идентификации изменения. При указании параметра всех обновлений старой операции обновления представляются как две строки: одна, содержащая значения захваченных столбцов перед обновлением и другую, содержащую значения захваченных столбцов после обновления.

Данная функция перечисления создается, если для исходной таблицы включена система отслеживания измененных данных. Имя функции является производным и использует формат cdc.fn_cdc_get_all_changes_<capture_instance> , в котором capture_instance является значением, указанным для экземпляра записи, если исходная таблица включена для отслеживания измененных данных.

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

Синтаксис

cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )

<row_filter_option> ::=
    { all
      | all update old
    }

Аргументы

from_lsn

Значение нижней границы диапазона номеров LSN, включенных в результирующий набор. from_lsn является двоичным(10).

Только строки в cdc. [capture_instance]_CT таблицу изменений со значением в __$start_lsn больше или равно from_lsn включены в результирующий набор.

to_lsn

Значение верхней границы диапазона номеров LSN, включенных в результирующий набор. to_lsn является двоичным(10).

Только строки в cdc. [capture_instance]_CT таблицу изменений со значением в __$start_lsn больше или равно from_lsn и меньше или равно to_lsn включены в результирующий набор.

<row_filter_option>

Параметр, который управляет содержимым столбцов метаданных и строк, возвращаемых в результирующем наборе.

Может быть одним из следующих:

  • всех

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

  • все обновления старых

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

Таблица возвращенной информации

Имя столбца Тип данных Description
__$start_lsn binary(10) Номер LSN фиксации, связанный с изменением, хранящим последовательность фиксации данного изменения. Все изменения, зафиксированные в одной транзакции, имеют общий номер LSN фиксации.
__$seqval binary(10) Последовательное значение, используемое для упорядочивания изменений строк в пределах транзакции.
__$operation int Определяет операцию языка обработки данных (DML), необходимую для применения строки информации об изменениях к целевому источнику данных. Может быть одним из следующих значений:

1 = delete
2 = insert
3 = обновление (захваченные значения столбцов являются значениями столбцов перед операцией обновления). Данное значение используется, только если параметр фильтрации строк равен «all update old».
4 = update (захваченные значения столбцов являются значениями столбцов после операции обновления)
__$update_mask varbinary(128) Битовая маска, в которой каждому отслеживаемому столбцу, определенному для экземпляра отслеживания, соответствует один бит. Это значение имеет все определенные биты, равные 1, если __$operation1 или 2. Если __$operation3 или 4, то только эти биты, соответствующие измененным столбцам, имеют значение 1.
<captured source table columns> Различается Оставшиеся столбцы, возвращенные функцией, представляют собой отслеживаемые столбцы, определенные в момент создания экземпляра отслеживания. Если в списке отслеживаемых столбцов не указано ни одного столбца, возвращаются все столбцы в исходной таблице.

Разрешения

Требуется членство в предопределенных ролях сервера sysadmin или db_owner предопределенных ролей базы данных. Всем остальным пользователям необходимо разрешение SELECT для всех отслеживаемых столбцов в исходной таблице. Кроме того, если для экземпляра отслеживания была определена шлюзовая роль, требуется членство в этой роли базы данных. Если вызывающий объект не имеет разрешения на просмотр исходных данных, функция возвращает ошибку 229:

The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.

Замечания

Столбцы типа данных изображения, текстовогои ntext всегда назначают значение NULL, если __$operation1 или __$operation3. Столбцы типа данных varbinary(max), varchar(max)или nvarchar(max) назначаются NULL значение, если __$operation3, если столбец не изменен во время обновления. Если __$operation1, эти столбцы назначаются во время удаления. Вычисляемые столбцы, включенные в экземпляр записи, всегда имеют значение NULL.

Ошибка 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.

Эта ошибка должна быть обработана разработчиком.

Примеры

Доступны несколько шаблонов SQL Server Management Studio, в которых показано, как использовать функции запроса отслеживания измененных данных. Эти шаблоны доступны в меню "Вид " в Management Studio. Дополнительные сведения см. в обозревателе шаблонов.

Этот пример иллюстрирует шаблон Enumerate All Changes for Valid Range Template. Она использует функцию cdc.fn_cdc_get_all_changes_HR_Department для отчета обо всех доступных изменениях для экземпляра записи HR_Department, который определен для исходной таблицы HumanResources.Department в базе данных AdventureWorks2022.

-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO

DECLARE @from_lsn AS BINARY (10), @to_lsn AS BINARY (10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();

SELECT *
FROM cdc.fn_cdc_get_all_changes_HR_Department(@from_lsn, @to_lsn, N'all');
GO