<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 = delete2 = insert3 = обновление (захваченные значения столбцов являются значениями столбцов перед операцией обновления). Данное значение используется, только если параметр фильтрации строк равен «all update old».4 = update (захваченные значения столбцов являются значениями столбцов после операции обновления) |
__$update_mask |
varbinary(128) | Битовая маска, в которой каждому отслеживаемому столбцу, определенному для экземпляра отслеживания, соответствует один бит. Это значение имеет все определенные биты, равные 1 , если __$operation 1 или 2 . Если __$operation 3 или 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
, если __$operation
1
или __$operation
3
. Столбцы типа данных varbinary(max), varchar(max)или nvarchar(max) назначаются NULL
значение, если __$operation
3
, если столбец не изменен во время обновления. Если __$operation
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.
Эта ошибка должна быть обработана разработчиком.
Примеры
Доступны несколько шаблонов 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