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, bem como as linhas retornadas no conjunto de resultados. Quando a opção de filtragem de linha 'all' é especificada, cada alteração tem exatamente uma linha para identificar a alteração. Quando a opção 'all update old' é 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).

Somente 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ídas 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).

Somente 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 são incluídas no conjunto de resultados.

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

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 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.

all update old
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. Um dos seguintes pode ser feito:

1 = excluir

2 = inserir

3 = atualizar (valores da coluna capturados são os valores anteriores à operação de atualização). Esse valor se aplica somente quando a opção de filtro de linha 'all update old' for especificada.

4 = atualizar (valores de coluna capturados são os valores 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 que foram alteradas são definidos como 1.
<colunas da tabela de origem capturada> 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

As colunas do tipo de dados image, text e ntext sempre recebem um valor NULL quando __$operation = 1 ou __$operation = 3. As 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. Colunas computadas que são incluídas em uma instância de captura têm sempre 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 lsn_value parâmetro estiver além do tempo do LSN mais baixo ou do 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.

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 atualmente 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 binary(10), @to_lsn 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  

Confira também