sys.fn_cdc_map_time_to_lsn (Transact-SQL)

S’applique à :SQL Server

Retourne la valeur du numéro séquentiel du journal (LSN) de la start_lsn colonne dans la table système cdc.lsn_time_mapping pour l’heure spécifiée. Vous pouvez utiliser cette fonction pour mapper systématiquement des plages dateheure dans la plage basée sur LSN requise par les fonctions d’énumération de capture de données modifiées cdc.fn_cdc_get_all_changes_<capture_instance> et cdc.fn_cdc_get_net_changes_<capture_instance> pour retourner les modifications de données dans cette plage.

Conventions de la syntaxe Transact-SQL

Syntaxe

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>' { plus grand inférieur à | plus grand inférieur ou égal | plus petit supérieur à | plus petit supérieur ou égal }

Permet d’identifier une valeur LSN distincte dans la cdc.lsn_time_mapping table avec un associé tran_end_time qui satisfait la relation par rapport à la valeur tracking_time .

relational_operator est nvarchar(30).

tracking_time

Valeur datetime à mettre en correspondance. tracking_time a la valeur datetime.

Type de retour

binary(10)

Notes

Pour comprendre comment la sys.fn_cdc_map_time_to_lsn fonction peut être utilisée pour mapper des plages de date et heure à des plages LSN, envisagez le scénario suivant.

Supposez qu'un utilisateur souhaite extraire des données de modifications de façon quotidienne. Autrement dit, il ne souhaite extraire que les modifications pour un jour donné jusqu'à minuit compris. La limite inférieure de la plage temporelle se situerait à minuit, sans l'inclure, le jour précédent. La limite supérieure se situerait à minuit (compris) le jour donné. L’exemple suivant montre comment la fonction sys.fn_cdc_map_time_to_lsn peut être utilisée pour mapper systématiquement cette plage temporelle dans la plage LSN requise par les fonctions d’énumération de capture de données modifiées pour retourner toutes les modifications dans cette plage.

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’opérateur smallest greater than relationnel est utilisé pour limiter les modifications apportées à celles qui se sont produites après minuit le jour précédent. Si plusieurs entrées avec différentes valeurs LSN partagent la tran_end_time valeur identifiée comme la limite inférieure dans la table cdc.lsn_time_mapping , la fonction retourne le plus petit LSN garantissant que toutes les entrées sont incluses. Pour la limite supérieure, l’opérateur largest less than or equal to relationnel est utilisé pour s’assurer que la plage inclut toutes les entrées du jour, y compris celles qui ont minuit comme tran_end_time valeur. Si plusieurs entrées avec des valeurs LSN différentes partagent la tran_end_time valeur identifiée en tant que limite supérieure, la fonction retourne le LSN le plus grand s’assurant que toutes les entrées sont incluses.

Autorisations

Nécessite l'appartenance au rôle public .

Exemples

L’exemple suivant utilise la sys.fn_cdc_map_time_to_lsn fonction pour déterminer s’il existe des lignes dans la table cdc.lsn_time_mapping dont tran_end_time la valeur est supérieure ou égale à minuit. Cette requête peut être utilisée pour déterminer, par exemple, si le processus de capture a déjà traité les modifications validées jusqu'à minuit le jour précédent, afin que l'extraction des données de modifications pour ce jour puisse continuer.

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

Voir aussi