Freigeben über


<cdc.fn_cdc_get_all_changes_capture_instance> (Transact-SQL)

Gilt für:SQL Server

Gibt eine Zeile für jede auf die Quelltabelle innerhalb des angegebenen Bereichs der Protokollfolgenummer (Log Sequence Number, LSN) angewendete Änderung an. Wenn an einer Quellzeile während des Intervalls mehrere Änderungen vorgenommen wurden, wird jede Änderung im zurückgegebenen Resultset dargestellt. Zusätzlich zum Zurückgeben der Änderungsdaten stellen vier Metadatenspalten die Informationen bereit, die Sie zum Anwenden der Änderungen auf eine andere Datenquelle benötigen.

Zeilenfilteroptionen steuern den Inhalt der Metadatenspalten und die zeilen, die im Resultset zurückgegeben werden. Wenn die alle Zeilenfilteroption angegeben wird, weist jede Änderung genau eine Zeile auf, um die Änderung zu identifizieren. Wenn die alle alten Option angegeben ist, werden Aktualisierungsvorgänge als zwei Zeilen dargestellt: eine, die die Werte der erfassten Spalten vor der Aktualisierung und eine andere mit den Werten der erfassten Spalten nach der Aktualisierung enthält.

Diese Enumerationsfunktion wird zu dem Zeitpunkt erstellt, zu dem eine Quelltabelle für Change Data Capture aktiviert wird. Der Funktionsname wird abgeleitet und verwendet das Format cdc.fn_cdc_get_all_changes_<capture_instance> , in dem capture_instance der für die Aufnahmeinstanz angegebene Wert ist, wenn die Quelltabelle für die Änderungsdatenerfassung aktiviert ist.

Transact-SQL-Syntaxkonventionen

Syntax

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

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

Argumente

from_lsn

Der LSN-Wert, der den unteren Endpunkt des LSN-Bereichs darstellt, der im Resultset enthalten sein soll. from_lsn ist binary(10).

Nur Zeilen im cdc. [capture_instance]_CT Tabelle mit einem Wert in __$start_lsn größer oder gleich from_lsn in das Resultset einbezogen werden.

to_lsn

Der LSN-Wert, der den oberen Endpunkt des LSN-Bereichs darstellt, der im Resultset enthalten sein soll. to_lsn ist binary(10).

Nur Zeilen im cdc. [capture_instance]_CT Tabelle mit einem Wert in __$start_lsn größer oder gleich from_lsn und kleiner als oder gleich to_lsn werden in das Resultset einbezogen.

<row_filter_option>

Eine Option, die den Inhalt der Metadatenspalten und die zeilen steuert, die im Resultset zurückgegeben werden.

Eine der folgenden Optionen ist möglich:

  • alle

    Gibt alle Änderungen innerhalb des angegebenen LSN-Bereichs zurück. Bei Änderungen aufgrund eines Updatevorgangs gibt diese Option nur die Zeilen zurück, die die neuen Werte enthalten, nachdem das Update angewendet wurde.

  • alle alten

    Gibt alle Änderungen innerhalb des angegebenen LSN-Bereichs zurück. Bei Änderungen aufgrund eines Aktualisierungsvorgangs gibt diese Option sowohl die Zeile zurück, die die Spaltenwerte vor der Aktualisierung enthält, als auch die Zeile, die die Spaltenwerte nach der Aktualisierung enthält.

Zurückgegebene Tabelle

Spaltenname Datentyp BESCHREIBUNG
__$start_lsn binary(10) Commit-LSN, die der Änderung zugeordnet ist, die die Commitreihenfolge der Änderung beibehält. Änderungen, für die ein Commit in derselben Transaktion ausgeführt wurde, verwenden denselben Commit-LSN-Wert.
__$seqval binary(10) Sequenzwert, der verwendet wird, um Änderungen an einer Zeile innerhalb einer Transaktion zu sortieren.
__$operation int Identifiziert den Vorgang der Datenbearbeitungssprache (Data Manipulation Language, DML), der erforderlich ist, um die Zeile der Änderungsdaten auf die Zieldatenquelle anzuwenden. Dies kann einer der folgenden Werte sein:

1 = delete
2 = einfügen
3 = aktualisieren (erfasste Spaltenwerte sind Spaltenwerte vor dem Aktualisierungsvorgang). Dieser Wert ist nur gültig, wenn die Zeilenfilteroption 'all update old' angegeben ist.
4 = Aktualisieren (erfasste Spaltenwerte sind Spaltenwerte nach dem Aktualisierungsvorgang)
__$update_mask varbinary(128) Eine Bitmaske mit einem Bit, das den einzelnen aufgezeichneten Spalten entspricht, die für die Aufzeichnungsinstanz identifiziert wurden. Dieser Wert hat alle definierten Bits, die auf 1 festgelegt sind, wenn __$operation1 oder 2ist. Wenn __$operation3 oder 4ist, werden nur die Bits, die Spalten entsprechen, die geändert wurden, auf 1festgelegt.
<captured source table columns> Variiert Bei den verbleibenden Spalten, die von der Funktion zurückgegeben werden, handelt es sich um die aufgezeichneten Spalten, die beim Erstellen der Aufzeichnungsinstanz identifiziert wurden. Wenn in der Liste der aufgezeichneten Spalten keine Spalten angegeben wurden, werden alle Spalten in der Quelltabelle zurückgegeben.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle "sysadmin " oder db_owner festen Datenbankrolle. Für alle anderen Benutzer ist die SELECT-Berechtigung für alle aufgezeichneten Spalten in der Quelltabelle und, wenn eine Gatingrolle für die Aufzeichnungsinstanz definiert wurde, eine Mitgliedschaft in dieser Datenbankrolle erforderlich. Wenn der Aufrufer nicht über die Berechtigung zum Anzeigen der Quelldaten verfügt, gibt die Funktion den Fehler 229 zurück:

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

Hinweise

Spalten vom Datentyp Bild, Textund ntext- wird immer ein NULL Wert zugewiesen, wenn __$operation1 ist oder __$operation3ist. Spalten vom Datentyp varbinary(max), varchar(max)oder nvarchar(max) werden einem NULL Wert zugewiesen, wenn __$operation3 ist, es sei denn, die Spalte wurde während der Aktualisierung geändert. Wenn __$operation1ist, werden diese Spalten zum Zeitpunkt des Löschvorgangs ihrem Wert zugewiesen. Berechnete Spalten, die in einer Aufnahmeinstanz enthalten sind, weisen immer einen Wert von NULLauf.

Fehler 313 wird erwartet, wenn der angegebene LSN-Bereich beim Aufrufen von cdc.fn_cdc_get_all_changes_<capture_instance> oder cdc.fn_cdc_get_net_changes_<capture_instance>nicht geeignet ist. Wenn der parameter lsn_value über den Zeitpunkt des niedrigsten LSN oder des höchsten LSN hinausgeht, gibt die Ausführung dieser Funktionen den Fehler 313 zurück:

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

Der Entwickler sollte sich um diesen Fehler kümmern.

Beispiele

Es stehen mehrere SQL Server Management Studio-Vorlagen zur Verfügung, die zeigen, wie Sie die Abfragefunktionen für die Änderungsdatenerfassung verwenden. Diese Vorlagen sind im Menü "Ansicht" in Management Studio verfügbar. Weitere Informationen finden Sie im Vorlagen-Explorer.

Im folgenden Beispiel wird die Enumerate All Changes for Valid Range Template veranschaulicht. Es verwendet die Funktion cdc.fn_cdc_get_all_changes_HR_Department, um alle derzeit verfügbaren Änderungen für die Aufnahmeinstanz HR_Departmentzu melden, die für die Quelltabelle definiert ist, HumanResources.Department in der AdventureWorks2022-Datenbank.

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