Share via


<sys.fn_net_changes_capture_instance> (Transact-SQL)

Gilt für:SQL Server

Wrapper für die Abfragefunktionen des Net changes . Die Skripts, die zum Erstellen dieser Funktionen erforderlich sind, werden von der gespeicherten sys.sp_cdc_generate_wrapper_function Prozedur generiert. Weitere Informationen zur zum Erstellen sys.fn_net_changes_<capture_instance>verwendeten gespeicherten Prozedur finden Sie unter sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Transact-SQL-Syntaxkonventionen

Syntax

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

Argumente

start_time

Der datetime-Wert , der den niedrigen Endpunkt des Bereichs der Änderungstabelleneinträge darstellt, der in das Resultset aufgenommen werden soll.

Nur Zeilen in der Änderungstabelle cdc.<capture_instance>_CT , deren Commitzeit streng größer als start_time ist, werden in das Resultset eingeschlossen.

Wenn für dieses Argument ein Wert von NULL übergeben wird, entspricht der untere Endpunkt des Abfragebereichs dem unteren Endpunkt des gültigen Bereichs der Aufzeichnungsinstanz.

Wenn der Wert eines @start_time- oder @end_time-Parameters die Zeit der niedrigsten oder höchsten Protokollfolgenummer (LSN) übersteigt, wird bei der Ausführung der generierten Wrapperfunktionen der Fehler 313 zurückgegeben: 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.

end_time

Der datetime-Wert , der den hohen Endpunkt des Bereichs von Änderungstabelleneinträgen darstellt, der in das Resultset aufgenommen werden soll.

Dieser Parameter kann eine von zwei Bedeutungen annehmen, je nachdem, für den wert ausgewählt @closed_high_end_point wird, wenn sys.sp_cdc_generate_wrapper_function aufgerufen wird, um das Skript zum Erstellen der Wrapperfunktion zu generieren:

  • @closed_high_end_point = 1

    Nur Zeilen in der Änderungstabelle cdc.<capture_instance>_CT , die einen Wert in __$start_lsn und eine entsprechende Commitzeit kleiner oder gleich start_time haben, werden im Resultset enthalten.

  • @closed_high_end_point = 0

    Nur Zeilen in der Änderungstabelle cdc.<capture_instance>_CT , die über einen Wert in __$start_lsn und eine entsprechende Commitzeit unter start_time verfügen, werden im Resultset enthalten.

Wenn für dieses Argument ein Wert von NULL übergeben wird, entspricht der obere Endpunkt des Abfragebereichs dem oberen Endpunkt des gültigen Bereichs der Aufzeichnungsinstanz.

Wenn der Wert eines @start_time- oder @end_time-Parameters die Zeit der niedrigsten oder höchsten Protokollfolgenummer (LSN) übersteigt, wird bei der Ausführung der generierten Wrapperfunktionen der Fehler 313 zurückgegeben: 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.

<>row_filter_option ::= { all | all with mask | all with merge }

Eine Option, die den Inhalt der Metadatenspalten sowie die im Resultset zurückgegebenen Zeilen steuert. Eine der folgenden Optionen ist möglich:

alle
Gibt den endgültigen Inhalt einer geänderten Zeile in den Inhaltsspalten zurück sowie den erforderlichen Vorgang zum Anwenden der Zeile in der Metadatenspalte __CDC_OPERATION.

all with mask
Gibt den endgültigen Inhalt einer geänderten Zeile in den Inhaltsspalten zurück sowie den erforderlichen Vorgang zum Anwenden der einzelnen Zeilen in der Metadatenspalte __CDC_OPERATION. Wenn bei Generierung des Skripts zur Erstellung der Wrapperfunktion eine Aktualisierungsflagliste angegeben wurde, müssen Sie mit dieser Option die Aktualisierungsmaske füllen.

all with merge
Gibt den endgültigen Inhalt aller in den Inhaltsspalten geänderten Zeilen zurück.

Die Spalte __CDC_OPERATION ist einer der folgenden beiden Werte:

  • D, wenn die Zeile gelöscht werden muss.

  • M, wenn die Zeile eingefügt oder aktualisiert werden muss

Die Logik zum Bestimmen, ob eine Einfügung oder eine Aktualisierung erforderlich ist, um eine Änderung auf ein Ziel anzuwenden, führt zu mehr Komplexität bei der Abfrage. Verwenden Sie diese Option für verbesserte Leistung, wenn nicht zwischen Einfügungs- und Aktualisierungsvorgängen unterschieden werden muss. Dieser Ansatz funktioniert am besten in Zielumgebungen, in denen ein Zusammenführungsvorgang direkt verfügbar ist.

Zurückgegebene Tabelle

Spaltenname Spaltentyp BESCHREIBUNG
<Spalten aus @column_list> variiert Die Spalten, die im column_list Argument identifiziert sp_cdc_generate_wrapper_function werden, wenn es aufgerufen wird, um das Skript zum Erstellen des Wrappers zu generieren. Wenn column_list NULL ist, werden alle nachverfolgten Quellspalten im Resultset angezeigt.
__CDC_OPERATION nvarchar(2) Ein Vorgangscode, der angibt, welcher Vorgang auf die Zeile der Zielumgebung angewendet werden muss. Der Vorgang variiert je nach dem Wert des Arguments row_filter_option , der im folgenden Aufruf angegeben wird:

row_filter_option = "alle" , "alle mit Maske"

'D' - Löschvorgang

'I' - Einfügevorgang

'UN' - Aktualisierungsvorgang

row_filter_option = "alle mit Merge"

'D' - Löschvorgang

'M' - Einfüge- oder Aktualisierungsvorgang
<Spalten aus @update_flag_list> bit Ein Bitflag, das durch Anfügen _uflag an den Spaltennamen benannt wird. Das Flag übernimmt nur dann einen Wert ohne NULL, wenn row_filter_option= "alle mit Maske" und __CDC_OPERATION = "UN". Es wird auf 1 eingestellt, wenn die entsprechende Spalte innerhalb des Abfragefensters geändert wurde. Andernfalls ist es 0.

Bemerkungen

Die fn_net_changes_<capture_instance> Funktion dient als Wrapper für die cdc.fn_cdc_get_net_changes_<capture_instance> Abfragefunktion. Die sys.sp_cdc_generate_wrapper gespeicherte Prozedur wird verwendet, um das Skript für den Wrapper zu erstellen.

Wrapperfunktionen werden nicht automatisch erstellt. Es gibt zwei Dinge, die Sie tun müssen, um Wrapperfunktionen zu erstellen:

  1. Führen Sie die gespeicherte Prozedur aus, um das Skript zu generieren, das den Wrapper erstellt.

  2. Führen Sie das Skript aus, das die Wrapperfunktion tatsächlich erstellt.

Wrapperfunktionen ermöglichen es Benutzern, Änderungen systematisch abzufragen, die innerhalb eines Intervalls aufgetreten sind, das durch datetime-Werte anstelle von LSN-Werten begrenzt ist. Die Wrapperfunktionen führen alle erforderlichen Konvertierungen zwischen den bereitgestellten datetime-Werten und den LSN-Werten aus, die intern als Argumente für die Abfragefunktionen benötigt werden. Wenn die Wrapperfunktionen seriell verwendet werden, um einen Datenstrom mit Änderungsdaten zu verarbeiten, stellen sie sicher, dass keine Daten verloren gehen oder wiederholt werden, sofern die folgende Konvention eingehalten wird: Der @end_time Wert des einem Aufruf zugeordneten Intervalls wird als Wert für das @start_time dem nachfolgenden Aufruf zugeordnete Intervall angegeben.

Wenn Sie den Parameter @closed_high_end_point bei Erstellung des Skripts verwenden, können Sie Wrapper generieren, die im angegebenen Abfragefenster eine geschlossene obere Grenze oder eine offene untere Grenze unterstützen. Sie können also entscheiden, ob Einträge mit einer Commitzeit in das Intervall aufgenommen werden sollen, die der oberen Grenze des Extrahierungsintervalls entspricht. Standardmäßig wird die Obergrenze aufgenommen.

Das Resultset, das von der Wrapperfunktion net changes zurückgegeben wird, gibt nur die nachverfolgten Spalten zurück, die sich im Zeitpunkt der @column_list Generierung des Wrappers befanden. Wenn @column_list NULL ist, werden alle verfolgten Quellspalten zurückgegeben. Den Quellspalten folgt die Vorgangspalte, __CDC_OPERATION. Es handelt sich um eine Spalte mit einem oder zwei Zeichen, die den Vorgang identifiziert.

Bitflags werden dann an das Resultset für jede Spalte angefügt, die im Parameter @update_flag_listidentifiziert ist. Für den Net Changes Wrapper sind die Bitflags immer NULL, wenn das, das @row_filter_option im Aufruf der Wrapperfunktion verwendet wird, "all" oder "all with merge" lautet. Wenn auf @row_filter_option "alle mit Maske" festgelegt ist und __CDC_OPERATION "D" oder "I" ist, lautet der Wert des Flags ebenfalls NULL. Wenn __CDC_OPERATION "UN" ist, wird das Flag auf 1 oder 0 festgelegt, je nachdem, ob der Net Update-Vorgang eine Änderung der Spalte verursacht hat.

Die Konfigurationsvorlage "Instanziieren von CDC-Wrapper-TVFs für Schema" zeigt, wie mithilfe der sp_cdc_generate_wrapper_function gespeicherten Prozedur CREATE-Skripts für alle Wrapperfunktionen für die definierten Abfragefunktionen eines Schemas abgerufen werden. Diese Skripts werden dann von der Vorlage erstellt. Weitere Informationen zu Vorlagen finden Sie unter Vorlagen Explorer.

Die Wrapperfunktionen sys.fn_all_changes_<capture_instance> und sys.fn_net_changes_<capture_instance> sind von den Systemfunktionen cdc.fn_cdc_get_all_changes_<capture_instance> und cdc.fn_cdc_get_net_changes_<capture_instance>abhängig. 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 über die Zeit des niedrigsten LSN oder höchsten LSN hinaus liegt, wird die Ausführung dieser Funktionen im Fehler 313 zurückgegeben: 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. Beispiel für eine Problemumgehung finden Sie unter ReplTalk auf GitHub.

Weitere Informationen