sys.fn_cdc_map_time_to_lsn (Transact-SQL)

Aplica-se a: SQL Server

Retorna o valor do LSN (número de sequência de log) da start_lsn coluna na tabela do sistema cdc.lsn_time_mapping para o tempo especificado. Você pode usar essa função para mapear sistematicamente intervalos de data e hora no intervalo baseado em LSN necessário para as funções de enumeração de captura de dados de alteração cdc.fn_cdc_get_all_changes_<capture_instance> e cdc.fn_cdc_get_net_changes_<capture_instance> para retornar alterações de dados dentro desse intervalo.

Convenções de sintaxe de Transact-SQL

Sintaxe

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
    }

Argumentos

'<relational_operator>' { maior menor que | maior menor ou igual | menor maior que | menor maior ou igual }

Usado para identificar um valor LSN distinto na cdc.lsn_time_mapping tabela com um associado tran_end_time que satisfaz a relação quando comparado ao valor tracking_time .

relational_operator é nvarchar(30).

tracking_time

É o valor de data e hora ao qual corresponder. tracking_time é datetime.

Tipo de retorno

binary(10)

Comentários

Para entender como a sys.fn_cdc_map_time_to_lsn função pode ser usada para mapear intervalos de data e hora para intervalos LSN, considere o cenário a seguir.

Presuma que um consumidor queira extrair dados de alteração diariamente. Ou seja, o consumidor deseja apenas as alterações de um determinado dia até a meia-noite. O limite inferior do intervalo de tempo deve ir até, mas não incluir, a meia-noite do dia anterior. O limite superior deve ir até e incluir a meia-noite do dia determinado. O exemplo a seguir mostra como a função sys.fn_cdc_map_time_to_lsn pode ser usada para mapear sistematicamente esse intervalo baseado em tempo para o intervalo baseado em LSN necessário para que as funções de enumeração de captura de dados de alteração retornem todas as alterações dentro desse intervalo.

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` `');

O operador smallest greater than relacional é usado para restringir as alterações àquelas que ocorreram após a meia-noite do dia anterior. Se várias entradas com valores LSN diferentes compartilharem o tran_end_time valor identificado como o limite inferior na tabela cdc.lsn_time_mapping , a função retornará o menor LSN, garantindo que todas as entradas sejam incluídas. Para o limite superior, o operador largest less than or equal to relacional é usado para garantir que o intervalo inclua todas as entradas do dia, incluindo aquelas que têm meia-noite como valor tran_end_time . Se várias entradas com valores LSN diferentes compartilharem o tran_end_time valor identificado como o limite superior, a função retornará o maior LSN, garantindo que todas as entradas sejam incluídas.

Permissões

Requer associação à função pública .

Exemplos

O exemplo a seguir usa a sys.fn_cdc_map_time_to_lsn função para determinar se há linhas na tabela cdc.lsn_time_mapping com um tran_end_time valor maior ou igual a meia-noite. Essa consulta pode ser usada para determinar, por exemplo, se o processo de captura já processou as alterações confirmadas desde meia-noite do dia anterior, de forma que a extração de dados de alteração para esse dia possa prosseguir.

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

Confira também