Compartilhar via


cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)

Aplica-se:SQL Server

Retorna uma linha para cada alteração aplicada à tabela de origem dentro do intervalo LSN (número de sequência de log) especificado. Se uma linha de origem tiver passado por várias alterações durante o intervalo, todas as alterações serão representadas no conjunto de resultados retornado. Além de retornar os dados de alteração, quatro colunas de metadados fornecem as informações necessárias para a aplicação de alterações em outra fonte de dados.

As opções de filtragem de linha regem o conteúdo das colunas de metadados e as linhas retornadas no conjunto de resultados. Quando o todas as opção de filtro de linha é especificada, cada alteração tem exatamente uma linha para identificar a alteração. Quando a opção todas as antigas de atualização é especificada, as operações de atualização são representadas como duas linhas: uma contendo os valores das colunas capturadas antes da atualização e outra contendo os valores das colunas capturadas após a atualização.

Essa função de enumeração é criada no momento em que uma tabela de origem é habilitada para change data capture. O nome da função é derivado e usa o formato cdc.fn_cdc_get_all_changes_<capture_instance> em que capture_instance é o valor especificado para a instância de captura quando a tabela de origem está habilitada para captura de dados de alteração.

Convenções de sintaxe de Transact-SQL

Sintaxe

cdc.fn_cdc_get_all_changes_<capture_instance> ( from_lsn , to_lsn , '<row_filter_option>' )

<row_filter_option> ::=
    { all
      | all update old
    }

Argumentos

from_lsn

O valor LSN que representa o ponto de extremidade inferior do intervalo LSN a ser incluído no conjunto de resultados. from_lsn é binário(10).

Apenas linhas no cdc . [capture_instance]_CT tabela de alterações com um valor em __$start_lsn maior ou igual a from_lsn são incluídos no conjunto de resultados.

to_lsn

O valor LSN que representa o ponto de extremidade superior do intervalo LSN a ser incluído no conjunto de resultados. to_lsn é binário (10).

Apenas linhas no cdc . [capture_instance]_CT tabela de alterações com um valor em __$start_lsn maior ou igual a from_lsn e menor ou igual a to_lsn estão incluídos no conjunto de resultados.

<row_filter_option>

Uma opção que rege o conteúdo das colunas de metadados e as linhas retornadas no conjunto de resultados.

Pode ser uma das seguintes opções:

  • todos os

    Retorna todas as alterações do intervalo LSN especificado. Para alterações relativas a uma operação de atualização, essa opção retorna apenas a linha que contém os novos valores após a aplicação da atualização.

  • todas as antigas de atualização

    Retorna todas as alterações do intervalo LSN especificado. Com relação às alterações relativas a uma operação de atualização, essa opção retorna tanto a linha que contém os valores da coluna antes da atualização como a linha que contém os valores da coluna após a atualização.

Tabela retornada

Nome da coluna Tipo de dados Descrição
__$start_lsn binary(10) LSN de confirmação associado à alteração que preserva a ordem de confirmação da alteração. Alterações confirmadas na mesma transação compartilham o mesmo valor LSN de confirmação.
__$seqval binary(10) Valor de sequência usado para solicitar alterações em uma linha dentro de uma transação.
__$operation int Identifica a operação DML (linguagem de manipulação de dados) necessária para aplicar a linha de dados de alteração à fonte de dados de destino. Pode ser um dos seguintes valores:

1 = excluir
2 = inserir
3 = atualização (valores de coluna capturados são valores de coluna antes da operação de atualização). Esse valor se aplica somente quando a opção de filtro de linha 'all update old' for especificada.
4 = atualização (valores de coluna capturados são valores de coluna após a operação de atualização)
__$update_mask varbinary(128) Uma máscara de bits com um bit correspondente a cada coluna capturada identificada para a instância de captura. Esse valor tem todos os bits definidos definidos como 1 quando __$operation é 1 ou 2. Quando __$operation é 3 ou 4, somente os bits correspondentes às colunas alteradas são definidos como 1.
<captured source table columns> varia As colunas restantes retornadas pela função são as colunas capturadas identificadas quando a instância de captura foi criada. Se nenhuma coluna tiver sido especificada na lista de colunas capturadas, todas as colunas da tabela de origem serão retornadas.

Permissões

Requer associação na função de servidor fixa sysadmin ou db_owner função de banco de dados fixa. Para todos os outros usuários, requer a permissão SELECT em todas as colunas capturadas na tabela de origem e, se uma função associada para a instância de captura tiver sido definida, faça associação nessa função de banco de dados. Quando o chamador não tem permissão para exibir os dados de origem, a função retorna o erro 229:

The SELECT permission was denied on the object 'fn_cdc_get_all_changes_...', database '<DatabaseName>', schema 'cdc'.

Comentários

Colunas do tipo de dados de imagem,de texto e de ntext sempre recebem um valor quando é ou é . Colunas do tipo de dados varbinary(max), varchar(max)ou nvarchar(max) recebem um valor NULL quando __$operation é 3 a menos que a coluna seja alterada durante a atualização. Quando __$operation é 1, essas colunas recebem seu valor no momento da exclusão. As colunas computadas incluídas em uma instância de captura sempre têm um valor de NULL.

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 parâmetro lsn_value estiver além do tempo de LSN mais baixo ou LSN mais alto, a execução dessas funções retornará o 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.

Exemplos

Vários modelos do SQL Server Management Studio estão disponíveis para mostrar como usar as funções de consulta de captura de dados de alteração. Esses modelos estão disponíveis no menu Exibir no Management Studio. Para obter mais informações, consulte Gerenciador de Modelos.

Este exemplo mostra o Enumerate All Changes for Valid Range Template. Ele usa a função cdc.fn_cdc_get_all_changes_HR_Department para relatar todas as alterações disponíveis no momento para a instância de captura HR_Department, que é definida para a tabela de origem HumanResources.Department no banco de dados AdventureWorks2022.

-- Enumerate All Changes for Valid Range Template
USE AdventureWorks2022;
GO

DECLARE @from_lsn AS BINARY (10), @to_lsn AS BINARY (10);
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();

SELECT *
FROM cdc.fn_cdc_get_all_changes_HR_Department(@from_lsn, @to_lsn, N'all');
GO