<cdc.fn_cdc_get_all_changes_capture_instance> (Transact-SQL)

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

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

Данная функция перечисления создается, если для исходной таблицы включена система отслеживания измененных данных. Имя функции является производным и использует формат 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 ::= { все | все обновления старых }

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

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

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

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

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

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

1 = удаление

2 = вставка

3 = обновление (значения отслеживаемого столбца перед операцией обновления). Данное значение используется, только если параметр фильтрации строк равен «all update old».

4 = обновление (значения отслеживаемого столбца после операции обновления).
__$update_mask varbinary(128) Битовая маска, в которой каждому отслеживаемому столбцу, определенному для экземпляра отслеживания, соответствует один бит. Это значение имеет все определенные биты, равные 1, если операция __$= 1 или 2. Если операция __$= 3 или 4, то только эти биты, соответствующие измененным столбцам, имеют значение 1.
<отслеживаемые столбцы исходной таблицы> Различается Оставшиеся столбцы, возвращенные функцией, представляют собой отслеживаемые столбцы, определенные в момент создания экземпляра отслеживания. Если в списке отслеживаемых столбцов не указано ни одного столбца, возвращаются все столбцы в исходной таблице.

Разрешения

Требуется членство в предопределенных ролях сервера sysadmin или db_owner предопределенных ролей базы данных. Всем остальным пользователям необходимо разрешение SELECT для всех отслеживаемых столбцов в исходной таблице. Кроме того, если для экземпляра отслеживания была определена шлюзовая роль, требуется членство в этой роли базы данных. Если вызывающий объект не имеет разрешения на просмотр исходных данных, функция возвращает ошибку 229 The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '\<DatabaseName>', schema 'cdc'.

Замечания

Столбцы изображения типа данных, текста и ntext всегда назначают значение NULL, если операция __$= 1 или __$operation = 3. Столбцы типа данных varbinary(max), varchar(max)или nvarchar(max) назначаются значение NULL, если __$operation = 3, если только столбец не изменился во время обновления. Если операция __$ = 1, эти столбцы присваиваются их значению во время удаления. Вычисляемые столбцы, которые включены в экземпляр системы отслеживания, всегда имеют значение 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 Эта ошибка должна быть обработана разработчиком. Пример T-SQL для обходного решения можно найти в ReplTalk на сайте GitHub.

Примеры

Доступны несколько шаблонов 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 binary(10), @to_lsn 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  

См. также