cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
platí pro:SQL Server
Vrátí jeden řádek pro každou změnu použitou ve zdrojové tabulce v zadaném rozsahu pořadového čísla protokolu (LSN). Pokud zdrojový řádek během intervalu obsahoval více změn, každá změna je reprezentována ve vrácené sadě výsledků. Kromě vrácení dat o změnách poskytují čtyři sloupce metadat informace, které potřebujete k použití změn v jiném zdroji dat.
Možnosti filtrování řádků řídí obsah sloupců metadat a řádků vrácených v sadě výsledků. Pokud je zadána všechna možnost filtru řádků, každá změna má přesně jeden řádek pro identifikaci změny. Pokud je zadána možnost všechny aktualizace staré, operace aktualizace jsou reprezentovány jako dva řádky: jeden obsahující hodnoty zachycených sloupců před aktualizací a druhý obsahující hodnoty zachycených sloupců po aktualizaci.
Tato funkce výčtu se vytvoří v době, kdy je povolena zdrojová tabulka pro zachytávání dat změn. Název funkce je odvozen a používá formát cdc.fn_cdc_get_all_changes_<capture_instance>
, kde capture_instance je hodnota zadaná pro instanci zachycení, pokud je zdrojová tabulka povolena pro zachytávání dat změn.
Syntax
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
Hodnota LSN, která představuje nízký koncový bod oblasti LSN, která se má zahrnout do sady výsledků. from_lsn je binární (10).
Pouze řádky v cdc. [capture_instance]_CT změnit tabulku s hodnotou v __$start_lsn
větší nebo rovno from_lsn jsou zahrnuty do sady výsledků.
to_lsn
Hodnota LSN, která představuje vysoký koncový bod oblasti LSN, která se má zahrnout do sady výsledků. to_lsn je binární (10).
Pouze řádky v cdc. [capture_instance]_CT změnit tabulku s hodnotou v __$start_lsn
větší nebo rovno from_lsn a menší než nebo rovno to_lsn jsou zahrnuty do sady výsledků.
<row_filter_option>
Možnost, která řídí obsah sloupců metadat a řádků vrácených v sadě výsledků.
Může to být jedna z následujících možností:
všechny
Vrátí všechny změny v zadaném rozsahu LSN. U změn z důvodu operace aktualizace tato možnost vrátí pouze řádek obsahující nové hodnoty po použití aktualizace.
všechny aktualizace starých
Vrátí všechny změny v zadaném rozsahu LSN. U změn z důvodu operace aktualizace vrátí tato možnost jak řádek obsahující hodnoty sloupců před aktualizací, tak řádek obsahující hodnoty sloupce po aktualizaci.
Vrácená tabulka
Název sloupce | Datový typ | Popis |
---|---|---|
__$start_lsn |
binární(10) | Potvrzení LSN přidružené ke změně, která zachovává pořadí potvrzení změny. Změny potvrzené ve stejné transakci sdílejí stejnou hodnotu potvrzení LSN. |
__$seqval |
binární(10) | Pořadová hodnota použitá k seřazení změn na řádek v rámci transakce. |
__$operation |
int | Identifikuje operaci jazyka pro manipulaci s daty (DML) potřebnou k použití řádku změn dat na cílový zdroj dat. Může to být jedna z následujících hodnot:1 = delete2 = vložit3 = update (hodnoty zachycených sloupců jsou hodnoty sloupců před operací aktualizace). Tato hodnota platí pouze v případě, že je zadána možnost filtru řádku všechna aktualizovat stará.4 = update (hodnoty zachycených sloupců jsou hodnoty sloupců po operaci aktualizace) |
__$update_mask |
varbinary(128) | Bitová maska s bitem odpovídajícím jednotlivým zachyceným sloupcům identifikovaným pro instanci zachycení. Tato hodnota má všechny definované bity nastavené na 1 , pokud je __$operation 1 nebo 2 . Je-li __$operation 3 nebo 4 , jsou nastaveny pouze ty bity odpovídající sloupcům, které se změnily na 1 . |
<captured source table columns> |
liší se | Zbývající sloupce vrácené funkcí jsou zachycené sloupce identifikované při vytvoření instance zachycení. Pokud v seznamu zachycených sloupců nebyly zadány žádné sloupce, vrátí se všechny sloupce ve zdrojové tabulce. |
Dovolení
Vyžaduje členství v správce systému pevné role serveru nebo db_owner pevné databázové roli. Pro všechny ostatní uživatele vyžaduje oprávnění SELECT pro všechny zachycené sloupce ve zdrojové tabulce a pokud byla definována role gating pro instanci zachycení, členství v této databázové roli. Pokud volající nemá oprávnění k zobrazení zdrojových dat, vrátí funkce chybu 229:
The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.
Poznámky
Sloupce datového typu obrázku, textovéa ntextové jsou vždy přiřazeny NULL
hodnotu, pokud je __$operation
1
nebo __$operation
je 3
. Sloupce datového typu varbinary(max), varchar(max)nebo nvarchar(max) jsou přiřazeny NULL
hodnotu při __$operation
3
, pokud se sloupec během aktualizace nezměnil. Když je __$operation
1
, přiřadí se jim jejich hodnota v době odstranění. Počítané sloupce, které jsou zahrnuté v instanci zachycení, mají vždy hodnotu NULL
.
Chyba 313 se očekává, pokud zadaný rozsah LSN není vhodný při volání cdc.fn_cdc_get_all_changes_<capture_instance>
nebo cdc.fn_cdc_get_net_changes_<capture_instance>
. Pokud je parametr lsn_value
nad rámec času nejnižšího LSN nebo nejvyššího LSN, vrátí provádění těchto funkcí chybu 313:
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function.
Tuto chybu by měl zpracovat vývojář.
Příklady
K dispozici je několik šablon aplikace SQL Server Management Studio, které ukazují, jak používat funkce dotazů pro zachytávání dat změn. Tyto šablony jsou k dispozici v nabídce Zobrazení v sadě Management Studio. Další informace naleznete v tématu Průzkumník šablony.
Tento příklad ukazuje Enumerate All Changes for Valid Range Template
. Používá funkci cdc.fn_cdc_get_all_changes_HR_Department
k hlášení všech aktuálně dostupných změn pro instanci zachycení HR_Department
, která je definována pro zdrojová tabulka HumanResources.Department
v databázi 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
Související obsah
-
cdc.fn_cdc_get_net_changes_ capture_instance (Transact-SQL) - sys.fn_cdc_map_time_to_lsn (Transact-SQL)
-
sys.sp_cdc_get_ddl_history (Transact-SQL) -
sys.sp_cdc_get_captured_columns (Transact-SQL) -
sys.sp_cdc_help_change_data_capture (Transact-SQL) - Co je zachytávání dat změn (CDC)?