Dela via


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

gäller för:SQL Server

Returnerar en rad för varje ändring som tillämpas på källtabellen inom det angivna LSN-intervallet (log sequence number). Om en källrad hade flera ändringar under intervallet representeras varje ändring i den returnerade resultatuppsättningen. Förutom att returnera ändringsdata ger fyra metadatakolumner den information du behöver för att tillämpa ändringarna på en annan datakälla.

Alternativ för radfiltrering styr innehållet i metadatakolumnerna och raderna som returneras i resultatuppsättningen. När alternativet alla radfilter anges har varje ändring exakt en rad för att identifiera ändringen. När alla gamla alternativet uppdateras visas uppdateringsåtgärder som två rader: en som innehåller värdena för de insamlade kolumnerna före uppdateringen och en annan som innehåller värdena för de insamlade kolumnerna efter uppdateringen.

Den här uppräkningsfunktionen skapas när en källtabell aktiveras för insamling av ändringsdata. Funktionsnamnet härleds och använder formatet cdc.fn_cdc_get_all_changes_<capture_instance> där capture_instance är det värde som anges för avbildningsinstansen när källtabellen är aktiverad för insamling av ändringsdata.

Transact-SQL syntaxkonventioner

Syntax

cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )

<row_filter_option> ::=
    { all
      | all update old
    }

Argument

from_lsn

LSN-värdet som representerar den låga slutpunkten för LSN-intervallet som ska inkluderas i resultatuppsättningen. from_lsn är binary(10).

Endast rader i cdc. [capture_instance]_CT ändringstabell med ett värde i __$start_lsn större än eller lika med from_lsn ingår i resultatuppsättningen.

to_lsn

LSN-värdet som representerar den höga slutpunkten för LSN-intervallet som ska inkluderas i resultatuppsättningen. to_lsn är binary(10).

Endast rader i cdc. [capture_instance]_CT ändringstabell med ett värde i __$start_lsn större än eller lika med from_lsn och mindre än eller lika med to_lsn ingår i resultatuppsättningen.

<row_filter_option>

Ett alternativ som styr innehållet i metadatakolumnerna och raderna som returneras i resultatuppsättningen.

Kan vara något av följande alternativ:

  • alla

    Returnerar alla ändringar inom det angivna LSN-intervallet. För ändringar på grund av en uppdateringsåtgärd returnerar det här alternativet endast raden som innehåller de nya värdena efter att uppdateringen har tillämpats.

  • alla gamla

    Returnerar alla ändringar inom det angivna LSN-intervallet. För ändringar på grund av en uppdateringsåtgärd returnerar det här alternativet både raden som innehåller kolumnvärdena före uppdateringen och raden som innehåller kolumnvärdena efter uppdateringen.

Tabellen returnerades

Kolumnnamn Datatyp Beskrivning
__$start_lsn binär(10) Checka in LSN som är associerad med ändringen som bevarar incheckningsordningen för ändringen. Ändringar som har checkats in i samma transaktion delar samma inchecknings-LSN-värde.
__$seqval binär(10) Sekvensvärde som används för att ordna ändringar i en rad i en transaktion.
__$operation int Identifierar den DML-åtgärd (Data Manipulation Language) som krävs för att tillämpa raden med ändringsdata på måldatakällan. Kan vara något av följande värden:

1 = ta bort
2 = insert
3 = update (insamlade kolumnvärden är kolumnvärden före uppdateringsåtgärden). Det här värdet gäller endast när radfilteralternativet "all update old" har angetts.
4 = uppdatering (insamlade kolumnvärden är kolumnvärden efter uppdateringsåtgärden)
__$update_mask varbinary(128) En bitmask med en bit som motsvarar varje samlad kolumn som identifieras för avbildningsinstansen. Det här värdet har alla definierade bitar inställda på 1 när __$operation är 1 eller 2. När __$operation är 3 eller 4anges endast de bitar som motsvarar kolumner som har ändrats till 1.
<captured source table columns> Varierar De återstående kolumnerna som returneras av funktionen är de insamlade kolumner som identifierades när avbildningsinstansen skapades. Om inga kolumner har angetts i den insamlade kolumnlistan returneras alla kolumner i källtabellen.

Behörigheter

Kräver medlemskap i sysadmin fast serverroll eller db_owner fast databasroll. För alla andra användare kräver SELECT-behörighet för alla insamlade kolumner i källtabellen och, om en gating-roll för insamlingsinstansen har definierats, medlemskap i den databasrollen. När anroparen inte har behörighet att visa källdata returnerar funktionen fel 229:

The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.

Anmärkningar

Kolumner av datatyp bild, textoch ntext tilldelas alltid ett NULL värde när __$operation är 1 eller __$operation är 3. Kolumner av datatyp varbinary(max), varchar(max)eller nvarchar(max) tilldelas ett NULL värde när __$operation3 såvida inte kolumnen ändrades under uppdateringen. När __$operation är 1tilldelas dessa kolumner sitt värde vid tidpunkten för borttagningen. Beräknade kolumner som ingår i en avbildningsinstans har alltid värdet NULL.

Fel 313 förväntas om det angivna LSN-intervallet inte är lämpligt när du anropar cdc.fn_cdc_get_all_changes_<capture_instance> eller cdc.fn_cdc_get_net_changes_<capture_instance>. Om parametern lsn_value överskrider tiden för lägsta LSN eller högsta LSN returnerar körningen av dessa funktioner fel 313:

Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function.

Det här felet bör hanteras av utvecklaren.

Exempel

Det finns flera SQL Server Management Studio-mallar som visar hur du använder frågefunktionerna för ändringsdatainsamling. Dessa mallar är tillgängliga på menyn Visa i Management Studio. Mer information finns i Template Explorer.

Det här exemplet visar Enumerate All Changes for Valid Range Template. Den använder funktionen cdc.fn_cdc_get_all_changes_HR_Department för att rapportera alla tillgängliga ändringar för avbildningsinstansen HR_Department, som definieras för källtabellen HumanResources.Department i AdventureWorks2022-databasen.

-- 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