Condividi tramite


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

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 utilizza il formato **cdc.fn_cdc_get_all_changes_**istanza_acquisizione dove istanza_acquisizioneè il valore specificato per l'istanza di acquisizione quando la tabella di origine è abilitata per l'acquisizione dei dati delle modifiche.

Icona di collegamento a un argomentoConvenzioni della 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
    Il valore LSN che rappresenta l'endpoint inferiore dell'intervallo LSN da includere nel set di risultati. from_lsn è binary(10).

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

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

    Solo le righe della tabella delle modifiche cdc.[istanza_acquisizione]_CT con un valore in __$start_lsn minore o uguale a from_lsn o uguale a to_lsn sono incluse 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:

    • all
      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 ad applicare la riga di dati delle modifiche all'origine dati di destinazione. I possibili valori sono i 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 corrispondente a ogni colonna acquisita identificata per l'istanza di acquisizione. Tutti i bit definiti per questo valore sono impostati su 1 quando __$operation = 1 o 2. Quando __$operation = 3 o 4, solo i bit che corrispondono a colonne che sono state modificate sono impostati 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

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner. 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 delle autorizzazioni per visualizzare i dati di origine, la funzione restituisce l'errore 229 ("Autorizzazione SELECT negata per l'oggetto 'fn_cdc_get_all_changes_... ' del database '<DatabaseName>' con schema 'cdc'").

Osservazioni

Se l'intervallo LSN specificato è esterno alla cronologia di rilevamento delle modifiche per l'istanza di acquisizione, la funzione restituisce l'errore 208 ("Numero di argomenti insufficienti per la procedura o la funzione cdc.fn_cdc_get_all_changes").

Alle colonne con tipi di dati image, text e ntext viene sempre assegnato un valore NULL quando __$operation = 1 o __$operation = 3. Alle colonne con tipi di dati varbinary(max), varchar(max) o nvarchar(max) viene assegnato un valore NULL quando __$operation = 3 a meno che la colonna non sia stata modificata durante l'aggiornamento. Quando __$operation = 1, a queste colonne vengono assegnati i rispettivi valori durante l'eliminazione. Le colonne calcolate incluse in un'istanza di acquisizione hanno sempre un valore NULL.

Esempi

Sono disponibili diversi modelli di SQL Server Management Studio in cui viene illustrato l'utilizzo delle funzioni di query di Change Data Capture. Questi modelli sono disponibili dal menu Visualizza in Management Studio. Per ulteriori informazioni, vedere Utilizzo dei modelli di SQL Server Management Studio.

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 AdventureWorks2008R2.

-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks2008R2;
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