cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

Si applica a:SQL Server

Restituisce una riga per ciascuna modifica applicata alla tabella di origine all'interno dell'intervallo del numero di sequenza del file di log (LSN) specificato. Se a una riga di origine vengono applicate più modifiche durante l'intervallo, ogni modifica è riportata nel set di risultati restituito. Oltre alla restituzione dei dati delle modifiche, quattro colonne di metadati forniscono le informazioni necessarie per applicare le modifiche a un'altra origine dati. Al contenuto delle colonne dei metadati e alle righe restituite nel set di risultati vengono applicate le opzioni di filtro di riga. Quando è specificata l'opzione di filtro di riga 'all', per l'identificazione di ogni modifica è disponibile esattamente una riga. Quando è specificata l'opzione 'all update old', le operazioni di aggiornamento sono rappresentate su due righe: una contiene i valori delle colonne acquisite prima dell'aggiornamento e l'altra contiene i valori delle colonne acquisite dopo l'aggiornamento.

Questa funzione di enumerazione viene creata nel momento in cui una tabella di origine è abilitata per Change Data Capture. Il nome della funzione è derivato e usa il formato cdc.fn_cdc_get_all_changes_<capture_instance> in cui capture_instance è il valore specificato per l'istanza di acquisizione quando la tabella di origine è abilitata per Change Data Capture.

Convenzioni di sintassi Transact-SQL

Sintassi

  
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )  
  
<row_filter_option> ::=  
{ all  
 | all update old  
}  

Argomenti

from_lsn

Valore LSN che rappresenta l'endpoint inferiore dell'intervallo LSN da includere nel set di risultati. from_lsn è binary(10).

Solo le righe in cdc.[ capture_instance]_CT tabella delle modifiche con un valore in __$start_lsn maggiore o uguale a from_lsn sono inclusi nel set di risultati.

to_lsn

Valore LSN che rappresenta l'endpoint superiore dell'intervallo LSN da includere nel set di risultati. to_lsn è binary(10).to_lsn is binary(10).

Solo le righe in cdc.[ capture_instance]_CT tabella delle modifiche con un valore in __$start_lsn maggiore o uguale a from_lsn e minore o uguale a to_lsn sono inclusi nel set di risultati.

<> 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 sia la riga che contiene i valori di colonna precedenti l'aggiornamento che la riga che contiene i valori di colonna successivi all'aggiornamento.

Tabella restituita

Nome colonna Tipo di dati Descrizione
__$start_lsn binary(10) Numero LSN di commit associato alla modifica. Mantiene l'ordine del commit della modifica. Le modifiche di cui è stato eseguito il commit nella stessa transazione condividono lo stesso valore LSN di commit.
__$seqval binary(10) Valore di sequenza utilizzato per ordinare le modifiche a una riga all'interno di una transazione.
__$operation int Identifica l'operazione DML (Data Manipulation Language) necessaria per applicare la riga di dati di modifica all'origine dati di destinazione. Può essere uno dei seguenti:

1 = eliminazione

2 = inserimento

3 = aggiornamento (i valori di colonna acquisiti sono quelli precedenti l'aggiornamento). Questo valore si applica solo quando è specificata l'opzione di filtro di riga 'all update old'.

4 = aggiornamento (i valori di colonna acquisiti sono quelli successivi all'aggiornamento).
__$update_mask varbinary(128) Maschera di bit in cui a ogni colonna acquisita identificata per l'istanza di acquisizione corrisponde un bit. Questo valore ha tutti i bit definiti impostati su 1 quando __$operation = 1 o 2. Quando __$operation = 3 o 4, vengono impostati solo i bit corrispondenti alle colonne modificate su 1.
<colonne della tabella di origine acquisite> variabile Le colonne rimanenti restituite dalla funzione sono le colonne acquisite identificate quando l'istanza di acquisizione è stata creata. Se nessuna colonna è stata specificata nell'elenco delle colonne acquisite, vengono restituite tutte le colonne nella tabella di origine.

Autorizzazioni

Richiede l'appartenenza al ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database. Per tutti gli altri utenti, è richiesta l'autorizzazione SELECT su tutte le colonne acquisite nella tabella di origine e, se è stato definito un ruolo di controllo per l'istanza di acquisizione, l'appartenenza a tale ruolo del database. Quando il chiamante non dispone dell'autorizzazione per visualizzare i dati di origine, la funzione restituisce l'errore 229 The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '\<DatabaseName>', schema 'cdc'.

Osservazioni:

Alle colonne di tipo di dati image, text e ntext viene sempre assegnato un valore NULL quando __$operation = 1 o __$operation = 3. Alle colonne di tipo di dati varbinary(max), varchar(max)o nvarchar(max) viene assegnato un valore NULL quando __$operation = 3, a meno che la colonna non sia cambiata durante l'aggiornamento. Quando __$operation = 1, a queste colonne viene assegnato il relativo valore al momento dell'eliminazione. Le colonne calcolate incluse in un'istanza di acquisizione hanno sempre un valore NULL.

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.

Esempi

Sono disponibili diversi modelli di SQL Server Management Studio che illustrano come usare le funzioni di query change data capture. Questi modelli sono disponibili nel menu Visualizza in Management Studio. Per altre informazioni, vedere Esplora modelli.

In questo esempio viene illustrato il Enumerate All Changes for Valid Range Template. Viene utilizzata la funzione cdc.fn_cdc_get_all_changes_HR_Department per riportare tutte le modifiche attualmente disponibili per l'istanza di acquisizione HR_Department, definita per tabella di origine HumanResources.Department nel database AdventureWorks2022.

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

Vedi anche