sys.fn_net_changes_<capture_instance> (Transact-SQL)

Aplica-se a:SQL Server

Wrappers para as funções de consulta de alterações líquidas . Os scripts necessários para criar essas funções são gerados pelo sys.sp_cdc_generate_wrapper_function procedimento armazenado. Para obter mais informações sobre o procedimento armazenado usado para criar sys.fn_net_changes_<capture_instance>, consulte sys.sp_cdc_generate_wrapper_function (Transact-SQL).

Convenções de sintaxe de Transact-SQL

Sintaxe

  
fn_net_changes_<capture_instance> ('start_time', 'end_time', '<row_filter_option>' )  
  
<capture_instance> ::= The name of the capture instance.  
<row_filter_option> ::=  
{ all  
  | all with mask  
  | all with merge  
}  

Argumentos

start_time

O valor datetime que representa o ponto de extremidade baixo do intervalo de entradas de tabela de alterações a serem incluídas no conjunto de resultados.

Somente as linhas na cdc.<capture_instance>_CT tabela de alterações que têm um tempo de confirmação associado estritamente maior que start_time são incluídas no conjunto de resultados.

Se um valor NULL for fornecido para este argumento, o ponto de extremidade inferior do intervalo da consulta corresponderá ao ponto de extremidade inferior de um intervalo válido para a instância de captura.

Se o valor do parâmetro @start_time ou @end_time exceder o tempo do LSN mais baixo ou do LSN mais alto, a execução das funções de wrapper geradas retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor.

end_time

O valor datetime que representa o ponto de extremidade alto do intervalo de entradas de tabela de alterações a serem incluídas no conjunto de resultados.

Esse parâmetro pode assumir um dos dois significados, dependendo do valor escolhido para @closed_high_end_point quando sys.sp_cdc_generate_wrapper_function é chamado para gerar o script para criar a função wrapper:

  • @closed_high_end_point = 1

    Somente as linhas na cdc.<capture_instance>_CT tabela de alteração que têm um valor em __$start_lsn e um tempo de confirmação correspondente menor ou igual a start_time são incluídas no conjunto de resultados.

  • @closed_high_end_point = 0

    Somente as linhas na cdc.<capture_instance>_CT tabela de alterações que têm um valor em __$start_lsn e um tempo de confirmação correspondente estritamente menor que start_time são incluídas no conjunto de resultados.

Se um valor NULL for fornecido para este argumento, o ponto de extremidade superior do intervalo da consulta corresponderá ao ponto de extremidade superior de um intervalo válido para a instância de captura.

Se o valor do parâmetro @start_time ou @end_time exceder o tempo do LSN mais baixo ou do LSN mais alto, a execução das funções de wrapper geradas retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor.

<>row_filter_option ::= { all | all with mask | all with merge }

Opção que rege o conteúdo das colunas de metadados, assim como as linhas retornadas no conjunto de resultados. Pode ser uma das seguintes opções:

all
Retorna o conteúdo final de uma linha alterada nas colunas de conteúdo e a operação que é requerida para aplicar a linha na coluna de metadados __CDC_OPERATION.

all with mask
Retorna o conteúdo final de todas as linhas alteradas nas colunas de conteúdo e a operação que é necessária para aplicar cada linha na coluna de metadados __CDC_OPERATION. Se uma lista de sinalizadores atualizada foi especificada durante a geração do script para criar a função de wrapper, essa opção será requerida para popular a máscara atualizada.

all with merge
Retorna o conteúdo final de todas as linhas alteradas nas colunas de conteúdo.

A coluna __CDC_OPERATION terá um dos seguintes dois valores:

  • D, se a linha precisar ser excluída.

  • M, se a linha dever ser inserida ou atualizada.

A lógica para determinar se uma inserção ou atualização é necessária para aplicação de uma alteração ao destino aumenta a complexidade da consulta. Use essa opção para obter desempenho aprimorado quando não for necessário fazer diferença entre operações de inserção e de atualização. Essa abordagem funciona melhor em ambientes de destino em que uma operação de mesclagem está disponível diretamente.

Tabela retornada

Nome da coluna Tipo de coluna Descrição
<colunas de @column_list> Varia As colunas identificadas no argumento column_list para o sp_cdc_generate_wrapper_function quando ele é chamado para gerar o script para criar o wrapper. Se column_list for NULL, todas as colunas de origem controladas aparecerão no conjunto de resultados.
__CDC_OPERATION nvarchar(2) Um código de operação que indica qual operação é necessária para se aplicar a linha ao ambiente de destino. A operação variará de acordo com o valor do argumento row_filter_option fornecido na seguinte chamada:

row_filter_option = 'all' , 'all with mask'

'D' – exclui a operação

'I' – insere a operação

'UN' – atualiza a operação

row_filter_option = 'tudo com mesclagem'

'D' – exclui a operação

'M – insere ou atualiza a operação
<colunas de @update_flag_list> bit Um sinalizador de bit é nomeado acrescentando _uflag ao nome da coluna. O sinalizador assume um valor não NULL somente quando row_filter_option= 'all with mask' and __CDC_OPERATION = 'UN'. Ele é definido como 1 se a coluna correspondente foi modificada dentro da janela de consulta. Caso contrário, será 0.

Comentários

A fn_net_changes_<capture_instance> função serve como um wrapper para a cdc.fn_cdc_get_net_changes_<capture_instance> função de consulta. O sys.sp_cdc_generate_wrapper procedimento armazenado é usado para criar o script para o wrapper.

As funções de wrapper não são criadas automaticamente. Há duas coisas que você precisa fazer para criar funções de wrapper:

  1. Executar o procedimento armazenado para gerar o script para criar o wrapper.

  2. Executar o script para realmente criar a função de wrapper.

As funções wrapper permitem que os usuários consultem sistematicamente as alterações que ocorreram em um intervalo limitado por valores datetime em vez de por valores LSN. As funções wrapper executam todas as conversões necessárias entre os valores de datetime fornecidos e os valores LSN necessários internamente como argumentos para as funções de consulta. Quando as funções wrapper são usadas serialmente para processar um fluxo de dados de alteração, elas garantem que nenhum dado seja perdido ou repetido, desde que a seguinte convenção seja seguida: o @end_time valor do intervalo associado a uma chamada é fornecido como o @start_time valor para o intervalo associado à chamada subsequente.

Usando o parâmetro @closed_high_end_point ao criar o script, você pode gerar wrappers para oferecer suporte a um limite superior fechado ou a um limite superior em aberto na janela de consulta especificada. Ou seja, você pode decidir se as entradas que têm uma hora de confirmação igual ao limite superior do intervalo de extração devem ser incluídas no intervalo. Por padrão, o limite superior é incluído.

O conjunto de resultados retornado pela função wrapper de alterações líquidas retorna apenas as colunas controladas que estavam no @column_list quando o wrapper foi gerado. Se @column_list for NULL, todas as colunas de origem rastreadas serão retornadas. As colunas de origem são acompanhadas por uma coluna de operação, __CDC_OPERATION, que é uma coluna de um ou dois caracteres que identifica a operação.

Os sinalizadores de bit são acrescentados ao conjunto de resultados para cada coluna identificada no parâmetro @update_flag_list. Para o wrapper de alterações líquidas , os sinalizadores de bit sempre serão NULL se o @row_filter_option usado na chamada para a função wrapper for 'all' ou 'all with merge'. Se o @row_filter_option estiver definido como "tudo com máscara" e __CDC_OPERATION for 'D' ou 'I', o valor do sinalizador também será NULL. Se __CDC_OPERATION for 'UN', o sinalizador será definido como 1 ou 0, dependendo se a operação de atualização líquida causou uma alteração na coluna.

O modelo de configuração de captura de dados de alteração 'Instanciar TVFs de Wrapper CDC para Esquema' mostra como usar o sp_cdc_generate_wrapper_function procedimento armazenado para obter scripts CREATE para todas as funções wrapper para as funções de consulta definidas de um esquema. Em seguida, o modelo cria esses scripts. Para obter mais informações sobre modelos, consulte Explorer de modelo.

As funções sys.fn_all_changes_<capture_instance> wrapper e sys.fn_net_changes_<capture_instance> dependem das funções cdc.fn_cdc_get_all_changes_<capture_instance> do sistema e cdc.fn_cdc_get_net_changes_<capture_instance>. O erro 313 é esperado se o intervalo LSN fornecido não for apropriado ao chamar cdc.fn_cdc_get_all_changes_<capture_instance> ou cdc.fn_cdc_get_net_changes_<capture_instance>. Se o lsn_value parâmetro estiver além do tempo de LSN mais baixo ou LSN mais alto, a execução dessas funções retornará no erro 313: Msg 313, Level 16, State 3, Line 1 An insufficient number of arguments were supplied for the procedure or function. Esse erro deve ser resolvido pelo desenvolvedor. Exemplo de T-SQL para uma solução alternativa pode ser encontrado no ReplTalk no GitHub.

Consulte Também