cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
Dotyczy:programu SQL Server
Zwraca jeden wiersz dla każdej zmiany zastosowanej do tabeli źródłowej w określonym zakresie numeru sekwencji dziennika (LSN). Jeśli wiersz źródłowy miał wiele zmian w interwale, każda zmiana jest reprezentowana w zwracanym zestawie wyników. Oprócz zwracania danych zmiany cztery kolumny metadanych zawierają informacje potrzebne do zastosowania zmian w innym źródle danych.
Opcje filtrowania wierszy określają zawartość kolumn metadanych i wierszy zwracanych w zestawie wyników. Po określeniu wszystkich filtru wierszy każda zmiana ma dokładnie jeden wiersz do zidentyfikowania zmiany. Po określeniu wszystkich aktualizacji starej operacje aktualizacji są reprezentowane jako dwa wiersze: jeden zawierający wartości przechwyconych kolumn przed aktualizacją, a drugi zawierający wartości przechwyconych kolumn po aktualizacji.
Ta funkcja wyliczenia jest tworzona w momencie włączenia tabeli źródłowej na potrzeby przechwytywania danych zmian. Nazwa funkcji jest pochodna i używa formatu cdc.fn_cdc_get_all_changes_<capture_instance>
gdzie capture_instance jest wartością określoną dla wystąpienia przechwytywania, gdy tabela źródłowa jest włączona do przechwytywania danych zmian.
Transact-SQL konwencje składni
Składnia
cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
Argumenty
from_lsn
Wartość LSN reprezentująca niski punkt końcowy zakresu LSN do uwzględnienia w zestawie wyników. from_lsn to binary(10).
Tylko wiersze w cdc. [capture_instance]_CT zmienić tabelę z wartością w __$start_lsn
większą lub równą from_lsn są uwzględnione w zestawie wyników.
to_lsn
Wartość LSN reprezentująca wysoki punkt końcowy zakresu LSN do uwzględnienia w zestawie wyników. to_lsn to binary(10).
Tylko wiersze w cdc. [capture_instance]_CT zmienić tabelę z wartością w __$start_lsn
większą lub równą from_lsn i mniejszą lub równą to_lsn są uwzględnione w zestawie wyników.
<row_filter_option>
Opcja, która zarządza zawartością kolumn metadanych i wierszami zwróconymi w zestawie wyników.
Może to być jedna z następujących opcji:
wszystkich
Zwraca wszystkie zmiany w określonym zakresie LSN. W przypadku zmian spowodowanych operacją aktualizacji ta opcja zwraca tylko wiersz zawierający nowe wartości po zastosowaniu aktualizacji.
wszystkie stare aktualizacji
Zwraca wszystkie zmiany w określonym zakresie LSN. W przypadku zmian spowodowanych operacją aktualizacji ta opcja zwraca zarówno wiersz zawierający wartości kolumny przed aktualizacją, jak i wiersz zawierający wartości kolumn po aktualizacji.
Zwrócona tabela
Nazwa kolumny | Typ danych | Opis |
---|---|---|
__$start_lsn |
|
Zatwierdź numer LSN skojarzony ze zmianą, która zachowuje kolejność zatwierdzania zmiany. Zmiany zatwierdzone w tym samym udziale transakcji tej samej wartości zatwierdzenia LSN. |
__$seqval |
|
Wartość sekwencji używana do zamawiania zmian w wierszu w ramach transakcji. |
__$operation |
Identyfikuje operację języka manipulowania danymi (DML) wymaganą do zastosowania wiersza danych zmiany do docelowego źródła danych. Może być jedną z następujących wartości:1 = delete2 = wstawianie3 = aktualizacja (przechwycone wartości kolumn są wartościami kolumn przed operacją aktualizacji). Ta wartość ma zastosowanie tylko wtedy, gdy zostanie określona opcja filtru wierszy "wszystkie aktualizacje stare".4 = aktualizacja (przechwycone wartości kolumn są wartościami kolumn po operacji aktualizacji) |
|
__$update_mask |
|
Maska bitowa z bitem odpowiadającym każdej przechwyconej kolumnie zidentyfikowanej dla wystąpienia przechwytywania. Ta wartość ma wszystkie zdefiniowane bity ustawione na 1 , gdy __$operation jest 1 lub 2 . Gdy __$operation jest 3 lub 4 , tylko te bity odpowiadające zmienionym kolumnom są ustawione na 1 . |
<captured source table columns> |
Różni się | Pozostałe kolumny zwracane przez funkcję to przechwycone kolumny zidentyfikowane podczas tworzenia wystąpienia przechwytywania. Jeśli na liście przechwyconych kolumn nie określono żadnych kolumn, zwracane są wszystkie kolumny w tabeli źródłowej. |
Uprawnienia
Wymaga członkostwa w sysadmin stałej roli serwera lub db_owner stałej roli bazy danych. Dla wszystkich innych użytkowników wymaga uprawnienia SELECT dla wszystkich przechwyconych kolumn w tabeli źródłowej, a jeśli zdefiniowano rolę gating dla wystąpienia przechwytywania, członkostwo w tej roli bazy danych. Gdy obiekt wywołujący nie ma uprawnień do wyświetlania danych źródłowych, funkcja zwraca błąd 229:
The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.
Uwagi
Kolumny typu danych obrazu, teksti ntekstowe są zawsze przypisywane wartości NULL
, gdy __$operation
jest 1
lub __$operation
jest 3
. Kolumny typu danych varbinary(max), varchar(max)lub nvarchar(max) są przypisywane NULL
wartość, gdy __$operation
jest 3
, chyba że kolumna zmieniła się podczas aktualizacji. Gdy __$operation
jest 1
, te kolumny są przypisywane do ich wartości w momencie usunięcia. Obliczone kolumny uwzględnione w wystąpieniu przechwytywania zawsze mają wartość NULL
.
Błąd 313 jest oczekiwany, jeśli podany zakres LSN nie jest odpowiedni podczas wywoływania cdc.fn_cdc_get_all_changes_<capture_instance>
lub cdc.fn_cdc_get_net_changes_<capture_instance>
. Jeśli parametr lsn_value
przekracza czas najniższego LSN lub najwyższego LSN, wykonanie tych funkcji zwraca błąd 313:
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function.
Ten błąd powinien być obsługiwany przez dewelopera.
Przykłady
Dostępnych jest kilka szablonów programu SQL Server Management Studio, które pokazują, jak używać funkcji zapytań przechwytywania zmian danych. Te szablony są dostępne w menu Widok
W tym przykładzie przedstawiono Enumerate All Changes for Valid Range Template
. Używa cdc.fn_cdc_get_all_changes_HR_Department
funkcji do raportowania wszystkich aktualnie dostępnych zmian dla wystąpienia przechwytywania HR_Department
, który jest zdefiniowany dla tabeli źródłowej HumanResources.Department
w bazie danych 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