Sdílet prostřednictvím


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.

Transact-SQL konvence syntaxe

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 = delete
2 = vložit
3 = 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 __$operation1 nebo 2. Je-li __$operation3 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 __$operation1 nebo __$operation je 3. Sloupce datového typu varbinary(max), varchar(max)nebo nvarchar(max) jsou přiřazeny NULL hodnotu při __$operation3, pokud se sloupec během aktualizace nezměnil. Když je __$operation1, 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