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


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

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

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

Значок ссылки на разделСоглашения о синтаксическом обозначении в 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 имеет тип binary(10).

    В результирующий набор включаются только строки в таблице изменений cdc.[экземпляр_отслеживания]_CT со значением __$start_lsn, большим или равным from_lsn.

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

    В результирующий набор включаются только строки в таблице изменений cdc.[экземпляр_отслеживания]_CT со значением __$start_lsn, меньшим или равным from_lsn или равным to_lsn .

  • <row_filter_option> ::= { all | all update old }
    Параметр, управляющий содержимым столбцов метаданных, а также строк, возвращаемых в результирующем наборе.

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

    • 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, если __$operation = 1 или 2. Если __$operation = 3 или 4, то в значение 1 устанавливаются только биты, соответствующие измененным столбцам.

<столбцы отслеживаемой исходной таблицы>

непостоянно

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

Разрешения

Требуется членство в предопределенной роли сервера sysadmin или в предопределенной роли базы данных db_owner. Всем остальным пользователям необходимо разрешение SELECT для всех отслеживаемых столбцов в исходной таблице. Кроме того, если для экземпляра отслеживания была определена шлюзовая роль, требуется членство в этой роли базы данных. Если вызывающий объект не имеет разрешения на просмотр исходных данных, то функция вернет ошибку 229 (Запрещено разрешение SELECT на объект "fn_cdc_get_all_changes_..." базы данных "<ИмяБазыДанных>" схемы "cdc".).

Замечания

Если указанный диапазон номеров LSN выходит за пределы временной шкалы отслеживания изменений в экземпляре системы отслеживания, то функция возвращает ошибку 208 (Для процедуры или функции cdc.fn_cdc_get_all_changes указано недостаточное количество аргументов).

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

Примеры

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

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

-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks
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