sys.fn_cdc_map_time_to_lsn (Transact-SQL)
Si applica a: SQL Server
Restituisce il valore LSN (Log Sequence Number) della start_lsn
colonna nella tabella di sistema cdc.lsn_time_mapping per l'ora specificata. È possibile usare questa funzione per mappare sistematicamente gli intervalli datetime nell'intervallo basato su LSN necessario dalle funzioni di enumerazione change data capture cdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance> per restituire modifiche ai dati all'interno di tale intervallo.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sys.fn_cdc_map_time_to_lsn ( '<relational_operator>', tracking_time )
<relational_operator> ::=
{ largest less than
| largest less than or equal
| smallest greater than
| smallest greater than or equal
}
Argomenti
'<relational_operator>' { maggiore maggiore di | maggiore o uguale a | minore o uguale a | minore maggiore o uguale a }
Utilizzato per identificare un valore LSN distinto all'interno della cdc.lsn_time_mapping
tabella con un oggetto associato tran_end_time
che soddisfa la relazione rispetto al valore tracking_time .
relational_operator è nvarchar(30).
tracking_time
Valore datetime da confrontare. tracking_time è datetime.
Tipo restituito
binary(10)
Osservazioni:
Per comprendere come usare la funzione per eseguire il sys.fn_cdc_map_time_to_lsn
mapping degli intervalli datetime agli intervalli LSN, considerare lo scenario seguente.
Si supponga che un utente desideri estrarre su base giornaliera i dati delle modifiche. Ovvero, l'utente desidera solo le modifiche relative a un giorno specifico fino alla mezzanotte (inclusa). Il limite inferiore dell'intervallo di tempo raggiunge, ma non include, la mezzanotte del giorno precedente. Il limite superiore raggiunge e include la mezzanotte del giorno specificato. Nell'esempio seguente viene illustrato come usare la funzione sys.fn_cdc_map_time_to_lsn
per eseguire il mapping sistematico di questo intervallo basato sul tempo nell'intervallo basato su LSN necessario dalle funzioni di enumerazione Change Data Capture per restituire tutte le modifiche all'interno di tale intervallo.
DECLARE @begin_time DATETIME,
@end_time DATETIME,
@begin_lsn BINARY (10),
@end_lsn BINARY (10);
SET @begin_time = '2007-01-01 12:00:00.000';
SET @end_time = '2007-01-02 12:00:00.000';
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all` `');
L'operatore smallest greater than
relazionale viene usato per limitare le modifiche a quelle che si sono verificate dopo la mezzanotte del giorno precedente. Se più voci con valori LSN diversi condividono il tran_end_time
valore identificato come limite inferiore nella tabella cdc.lsn_time_mapping , la funzione restituirà il LSN più piccolo assicurando che tutte le voci siano incluse. Per il limite superiore, l'operatore largest less than or equal to
relazionale viene usato per garantire che l'intervallo includa tutte le voci per il giorno, incluse quelle con mezzanotte come valore tran_end_time
. Se più voci con valori LSN diversi condividono il tran_end_time
valore identificato come limite superiore, la funzione restituirà l'LSN più grande assicurando che tutte le voci siano incluse.
Autorizzazioni
È richiesta l'appartenenza al ruolo public .
Esempi
Nell'esempio seguente viene utilizzata la sys.fn_cdc_map_time_to_lsn
funzione per determinare se sono presenti righe nella tabella cdc.lsn_time_mapping con un tran_end_time
valore maggiore o uguale a mezzanotte. Questa query può essere utilizzata per determinare, ad esempio, se il processo di acquisizione ha già elaborato le modifiche di cui è stato eseguito il commit fino alla mezzanotte del giorno precedente, in modo tale che possa procedere l'estrazione di dati delle modifiche per il giorno specifico.
DECLARE @extraction_time DATETIME,
@lsn BINARY (10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END