Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Returnerar logsekvensnummervärdet (LSN) från kolumnen start_lsn i cdc.lsn_time_mapping systemtabell för den angivna tiden. Du kan använda denna funktion för att systematiskt mappa datumtidsintervall till det LSN-baserade intervall som behövs av förändringsdatafångst-enumerationsfunktionerna cdc.fn_cdc_get_all_changes_<capture_instance> och cdc.fn_cdc_get_net_changes_<capture_instance> för att returnera dataändringar inom det intervallet.
Transact-SQL syntaxkonventioner
Syntax
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
}
Arguments
'<relational_operator>' { största mindre än | största mindre än eller lika | minsta större än | minsta större än eller lika }
Används för att identifiera ett distinkt LSN-värde i i cdc.lsn_time_mapping tabellen med en associerad tran_end_time som uppfyller relationen jämfört med tracking_time-värdet .
relational_operator är nvarchar(30).
tracking_time
Är datumtidsvärdet att jämföra med. tracking_time är dejttid.
Returtyp
binary(10)
Remarks
För att förstå hur sys.fn_cdc_map_time_to_lsn funktionen kan användas för att mappa datetime-intervall till LSN-intervall, betrakta följande scenario.
Anta att en konsument vill extrahera förändringsdata dagligen. Det vill säga, konsumenten vill bara ha förändringar för en given dag fram till och med midnatt. Den nedre gränsen för tidsintervallet skulle vara upp till, men inte inkluderat, midnatt föregående dag. Den övre gränsen skulle vara upp till och med midnatt den aktuella dagen. Följande exempel visar hur funktionen sys.fn_cdc_map_time_to_lsn kan användas för att systematiskt kartlägga detta tidsbaserade intervall till det LSN-baserade intervall som behövs av uppräkningsfunktionerna för förändringsdatafångst för att returnera alla ändringar inom det intervallet.
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` `');
Den relationella operatorn smallest greater than används för att begränsa ändringar till de som inträffade efter midnatt föregående dag. Om flera poster med olika LSN-värden delar tran_end_time värdet som identifierats som den nedre gränsen i cdc.lsn_time_mapping tabellen, kommer funktionen att returnera det minsta LSN och säkerställa att alla poster inkluderas. För övre gränsen används relationsoperatorn largest less than or equal to för att säkerställa att intervallet inkluderar alla poster för dagen, inklusive de som har midnatt som tran_end_time värde. Om flera poster med olika LSN-värden delar tran_end_time det värde som identifierats som övre gräns, kommer funktionen att returnera det största LSN och säkerställa att alla poster inkluderas.
Permissions
Kräver medlemskap i offentlig roll.
Examples
Följande exempel använder sys.fn_cdc_map_time_to_lsn funktionen för att avgöra om det finns några rader i tabellen cdc.lsn_time_mapping med ett tran_end_time värde som är större än eller lika med midnatt. Denna fråga kan användas för att till exempel avgöra om fångstprocessen redan har bearbetat de ändringar som gjorts fram till midnatt föregående dag, så att utvinningen av ändringsdata för den dagen kan fortsätta.
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