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.
Le opzioni di filtro delle righe regolano il contenuto delle colonne di metadati e le righe restituite nel set di risultati. Quando viene specificata l'opzione di filtro di riga tutte le, ogni modifica ha esattamente una riga per identificare la modifica. Quando viene specificata l'opzione di aggiornamento precedente, le operazioni di aggiornamento vengono rappresentate come due righe: una contenente i valori delle colonne acquisite prima dell'aggiornamento e un'altra contenente 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 relative alla 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 nel cdc. [capture_instance]_CT tabella delle modifiche con un valore in __$start_lsn
maggiore o uguale a from_lsn sono incluse 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 nel 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 incluse nel set di risultati.
<row_filter_option>
Opzione che regola il contenuto delle colonne di metadati e le righe restituite nel set di risultati.
Le opzioni possibili sono le seguenti:
tutti i
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.
tutti gli aggiornamenti di precedenti
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 valori seguenti:1 = delete2 = insert3 = aggiornamento (i valori di colonna acquisiti sono valori di colonna prima dell'operazione di 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 valori di colonna dopo l'operazione di 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 , solo i bit corrispondenti alle colonne modificate vengono impostati su 1 . |
<captured source table columns> |
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, testoe ntext vengono sempre assegnati un valore di 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
non viene 3
a meno che la colonna non venga modificata durante l'aggiornamento. Quando __$operation
è 1
, queste colonne vengono assegnate al relativo valore al momento dell'eliminazione. Le colonne calcolate incluse in un'istanza di acquisizione hanno sempre un valore di 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 parametro lsn_value
supera il tempo di LSN minimo o LSN più alto, l'esecuzione di queste funzioni restituisce 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.
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
. Usa la funzione cdc.fn_cdc_get_all_changes_HR_Department
per segnalare tutte le modifiche attualmente disponibili per l'istanza di acquisizione HR_Department
, definita per la tabella di origine HumanResources.Department
nel database AdventureWorks2022
.
-- 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