Share via


sys.fn_all_changes_<capture_instance> (Transact-SQL)

Si applica a:SQL Server

Wrapper per tutte le funzioni di query delle modifiche . Gli script necessari per creare queste funzioni vengono generati dalla sys.sp_cdc_generate_wrapper_function stored procedure. Per altre informazioni sulla stored procedure usata per creare sys.fn_all_changes_<capture_instance>, vedere sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Convenzioni di sintassi Transact-SQL

Sintassi

fn_all_changes_<capture_instance> ('start_time' ,'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all update old  
}  

Argomenti

start_time

Valore datetime che rappresenta l'endpoint basso dell'intervallo di voci della tabella delle modifiche da includere nel set di risultati.

Nel set di risultati vengono incluse solo le righe della cdc.<capture_instance>_CT tabella delle modifiche con un tempo di commit associato maggiore di start_time .

Se viene fornito un valore NULL per questo argomento, l'endpoint inferiore dell'intervallo della query corrisponderà all'endpoint inferiore dell'intervallo valido per l'istanza di acquisizione.

Se il valore del parametro @start_time o @end_time supera il tempo dell'LSN più basso o dell'LSN più alto, l'esecuzione di funzioni wrapper generate restituirà l'errore 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Questo errore deve essere gestito dallo sviluppatore.

end_time

Valore datetime che rappresenta l'endpoint elevato dell'intervallo di voci della tabella delle modifiche da includere nel set di risultati.

Questo parametro può assumere uno dei due significati possibili a seconda del valore scelto per @closed_high_end_point quando sys.sp_cdc_generate_wrapper_function viene chiamato per generare lo script di creazione per la funzione wrapper:

  • @closed_high_end_point = 1

    Nel set di risultati vengono incluse solo le righe della cdc.<capture_instance>_CT tabella delle modifiche con un tempo di commit associato minore o uguale a end_time.

  • @closed_high_end_point = 0

    Nel set di risultati vengono incluse solo le righe della cdc.capture_instance_CT tabella delle modifiche con un tempo di commit associato rigorosamente inferiore a end_time.

Se viene fornito un valore NULL per questo argomento, l'endpoint superiore dell'intervallo della query corrisponderà all'endpoint superiore dell'intervallo valido per l'istanza di acquisizione.

Se il valore del parametro @start_time o @end_time supera il tempo dell'LSN più basso o dell'LSN più alto, l'esecuzione di funzioni wrapper generate restituirà l'errore 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Questo errore deve essere gestito dallo sviluppatore.

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

Opzione applicata al contenuto delle colonne dei metadati e alle righe restituite nel set di risultati.

Le opzioni possibili sono le seguenti:

tutto
Restituisce tutte le modifiche all'interno dell'intervallo LSN specificato. Per le modifiche dovute a un'operazione di aggiornamento, questa opzione restituisce solo la riga che contiene i nuovi valori dopo l'applicazione dell'aggiornamento.

all update old
Restituisce tutte le modifiche all'interno dell'intervallo LSN specificato. Per le modifiche dovute a un'operazione di aggiornamento, questa opzione restituisce le due righe che contengono i valori della colonna prima e dopo l'aggiornamento.

Tabella restituita

Nome colonna Tipo di colonna Descrizione
__CDC_STARTLSN binary(10) Valore LSN di commit per la transazione associata alla modifica. Tutte le modifiche di cui è stato eseguito il commit nella stessa transazione condividono lo stesso valore LSN di commit.
__CDC_SEQVAL binary(10) Valore di sequenza utilizzato per ordinare le modifiche alle righe in una transazione.
<colonne da @column_list> variabile Colonne identificate nell'argomento column_list a sp_cdc_generate_wrapper_function quando viene chiamato per generare lo script che crea la funzione wrapper.
__CDC_OPERATION nvarchar(2) Codice operativo che indica l'operazione necessaria per applicare la riga all'ambiente di destinazione. La variabile varia in base al valore dell'argomento row_filter_option fornito nella chiamata:

row_filter_option = 'all'

'D' - operazione di eliminazione

'I' - operazione di inserimento

'UN' - operazione di aggiornamento ai nuovi valori

row_filter_option = 'all update old'

'D' - operazione di eliminazione

'I' - operazione di inserimento

'UN' - operazione di aggiornamento ai nuovi valori

'UO' - operazione di aggiornamento ai valori obsoleti
<colonne da @update_flag_list> bit Un flag di bit viene denominato aggiungendo _uflag al nome della colonna. Il flag è sempre impostato su NULL quando __CDC_OPERATION è 'D', 'I', di 'UO'. Quando __CDC_OPERATION è "UN", viene impostato su 1 se l'aggiornamento ha generato una modifica alla colonna corrispondente. Altrimenti, è impostato su 0.

Osservazioni:

La fn_all_changes_<capture_instance> funzione funge da wrapper per la cdc.fn_cdc_get_all_changes_<capture_instance> funzione di query. La sys.sp_cdc_generate_wrapper stored procedure viene usata per generare lo script per creare il wrapper.

Le funzioni wrapper non vengono create automaticamente. Per creare le funzioni wrapper, è necessario eseguire due operazioni:

  1. Eseguire la stored procedure per generare lo script di creazione del wrapper.

  2. Eseguire lo script per creare effettivamente la funzione wrapper.

Le funzioni wrapper consentono agli utenti di eseguire sistematicamente query sulle modifiche che si sono verificate entro un intervallo delimitato da valori datetime anziché da valori LSN. Le funzioni wrapper eseguono tutte le conversioni necessarie tra i valori datetime specificati e i valori LSN necessari internamente come argomenti per le funzioni di query. Quando le funzioni wrapper vengono usate serialmente per elaborare un flusso di dati delle modifiche, assicurano che nessun dato venga perso o ripetuto purché venga seguita la convenzione seguente: il @end_time valore dell'intervallo associato a una chiamata viene fornito come valore per l'intervallo @start_time associato alla chiamata successiva.

Utilizzando il parametro @closed_high_end_point durante la creazione dello script, è possibile generare wrapper per supportare un limite superiore chiuso o un limite superiore aperto nella finestra della query specificata, ovvero è possibile decidere se le voci che dispongono di un'ora di commit uguale al limite superiore dell'intervallo di estrazione devono essere incluse nell'intervallo. Per impostazione predefinita, il limite superiore è incluso.

Il set di risultati restituito dalla funzione wrapper tutte le modifiche restituisce rispettivamente le colonne __$start_lsn e __$seqval della tabella delle modifiche come colonne __CDC_STARTLSN e __CDC_SEQVAL. Segue questi elementi con solo le colonne rilevate visualizzate nel parametro @column_list quando è stato generato il wrapper. Se @column_list è NULL, vengono restituite tutte le colonne di origine rilevate. Le colonne di origine sono seguite dalla colonna __CDC_OPERATION, una colonna di uno o due caratteri che identifica l'operazione.

I flag di bit vengono quindi aggiunti al set di risultati per ogni colonna identificata nel parametro @update_flag_list. Per tutte le modifiche wrapper, i flag di bit saranno sempre NULL se __CDC_OPERATION è 'D', 'I' o 'UO'. Se __CDC_OPERATION è "UN", il flag verrà impostato su 1 o 0, a seconda che l'operazione di aggiornamento abbia causato una modifica alla colonna.

Il modello di configurazione change data capture 'Instantiate CDC Wrapper TVFs for Schema' illustra come usare la sp_cdc_generate_wrapper_function stored procedure per ottenere script CREATE per tutte le funzioni wrapper per le funzioni di query definite da uno schema. Il modello crea quindi tali script. Per altre informazioni sui modelli, vedere Esplora modelli.

Le funzioni sys.fn_all_changes_<capture_instance> wrapper e sys.fn_net_changes_<capture_instance> dipendono dalle funzioni cdc.fn_cdc_get_all_changes_<capture_instance> di sistema e cdc.fn_cdc_get_net_changes_<capture_instance>. L'errore 313 è previsto se l'intervallo LSN specificato non è appropriato quando si chiama cdc.fn_cdc_get_all_changes_<capture_instance> o cdc.fn_cdc_get_net_changes_<capture_instance>. Se il lsn_value parametro supera il tempo di LSN minimo o LSN più alto, l'esecuzione di queste funzioni restituirà l'errore 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Questo errore deve essere gestito dallo sviluppatore. L'esempio di T-SQL per una soluzione alternativa è disponibile in ReplTalk su GitHub.

Vedi anche