Condividi tramite


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 = delete
2 = insert
3 = 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