<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. Über Zeilenfilterungsoptionen werden der Inhalt der Metadatenspalten sowie die im Resultset zurückgegebenen Zeilen bestimmt. Wenn die Filteroption 'all' angegeben ist, verfügt jede Änderung über genau eine Zeile, um die Änderung zu identifizieren. Wenn die Option 'all update old' angegeben ist, werden die Updatevorgänge in zwei Zeilen dargestellt: Eine enthält die Werte der aufgezeichneten Spalten vor dem Update und die andere enthält die Werte der aufgezeichneten Spalten nach dem Update.

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 Formatcdc.fn_cdc_get_all_changes_<capture_instance>, wobei capture_instance der für die Erfassung angegebene Wert ist, instance, wenn die Quelltabelle für change data capture 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 Änderungstabelle mit einem Wert in __$start_lsn größer oder gleich from_lsn im Resultset enthalten sind.

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 Änderungstabelle mit einem Wert in __$start_lsn größer oder gleich from_lsn und kleiner oder gleich to_lsn im Resultset enthalten sind.

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

Eine Option, die den Inhalt der Metadatenspalten sowie der im Resultset zurückgegebenen Zeilen steuert.

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.

all update old
Gibt alle Änderungen innerhalb des angegebenen LSN-Bereichs zurück. Bei Änderungen aufgrund eines Aktualisierungsvorgangs gibt diese Option sowohl die Zeile mit den Spaltenwerten vor der Aktualisierung als auch die Zeile mit den Spaltenwerten nach dem Update zurück.

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. Dabei kann es sich um eine der folgenden Methoden handeln:

1 = Löschen

2 = Einfügen

3 = Update (die aufgezeichneten Spaltenwerte liegen vor dem Updatevorgang). Dieser Wert ist nur gültig, wenn die Zeilenfilteroption 'all update old' angegeben ist.

4 = Update (die aufgezeichneten Spaltenwerte liegen nach dem Updatevorgang).
__$update_mask varbinary(128) Eine Bitmaske mit einem Bit, das den einzelnen aufgezeichneten Spalten entspricht, die für die Aufzeichnungsinstanz identifiziert wurden. Für diesen Wert sind alle definierten Bits auf 1 festgelegt, wenn __$operation = 1 oder 2 ist. Wenn __$operation = 3 oder 4 ist, werden nur die Bits, die spalten entsprechen, die geändert wurden, auf 1 festgelegt.
<erfasste Quelltabellenspalten> 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'.

Bemerkungen

Spalten des Datentyps image, text und ntext wird immer ein NULL-Wert zugewiesen, wenn __$operation = 1 oder __$operation = 3. Spalten des Datentyps varbinary(max), varchar(max) oder nvarchar(max) wird ein NULL-Wert zugewiesen, wenn __$operation = 3 ist, es sei denn, die Spalte hat sich während der Aktualisierung geändert. Wenn __$operation = 1 ist, wird diesen Spalten ihr Wert zum Zeitpunkt des Löschens zugewiesen. Berechnete Spalten in einer Aufzeichnungsinstanz besitzen immer den Wert NULL.

Fehler 313 wird erwartet, wenn der angegebene LSN-Bereich beim Aufrufen cdc.fn_cdc_get_all_changes_<capture_instance> von oder cdc.fn_cdc_get_net_changes_<capture_instance>nicht geeignet ist. Wenn der lsn_value Parameter die Zeit der niedrigsten LSN oder der höchsten LSN überschreitet, 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. Ein T-SQL-Beispiel für eine Problemumgehung finden Sie unter ReplTalk auf GitHub.

Beispiele

Es stehen mehrere SQL Server Management Studio Vorlagen zur Verfügung, die die Verwendung der Change Data Capture-Abfragefunktionen veranschau nen. Diese Vorlagen sind im Menü Ansicht in Management Studio verfügbar. Weitere Informationen finden Sie unter Vorlagen Explorer.

Im folgenden Beispiel wird die Enumerate All Changes for Valid Range Template veranschaulicht. Darin werden mit der Funktion cdc.fn_cdc_get_all_changes_HR_Department alle derzeit verfügbaren Änderungen für die Aufzeichnungsinstanz HR_Department gemeldet, die für die Quelltabelle HumanResources.Department in der AdventureWorks2022-Datenbank definiert ist.

-- ========  
-- Enumerate All Changes for Valid Range Template  
-- ========  
USE AdventureWorks2022;  
GO  
  
DECLARE @from_lsn binary(10), @to_lsn 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  

Weitere Informationen