/ / SQL Server: como listar colunas alteradas com controle de alterações? - sql-server, controle de mudanças

SQL Server: Como listar colunas alteradas com rastreamento de alterações? - sql-server, controle de alterações

Eu uso o SQL Server 2012 Standard edition e ativei a função Change Tracking em uma mesa.

Quando listo as alterações em uma tabela com a função CHANGETABLE, tenho uma propriedade SYS_CHANGE_COLUMNS com dados binários

0x0000000045000000460000004700000048000000

Como posso saber quais colunas foram alteradas?

Respostas:

2 para resposta № 1

Porque a coluna é uma máscara de bits composta deIDs de coluna de todas as colunas que foram alteradas, é difícil saber do que é feito. Na verdade, MSDN diz para não interrogar SYS_CHANGE_COLUMNS diretamente aqui: https://msdn.microsoft.com/en-us/library/bb934145.aspx

Este valor binário não deve ser interpretado diretamente.

No entanto, quando você detecta alterações para fins de notificação, geralmente o consumidor da notificação tem uma boa ideia de quais colunas ele está interessado em alterar.

Para este caso de uso, use o CHANGE_TRACKING_IS_COLUMN_IN_MASK função.

-- Get the column ID of my column
declare @MyColumnId int
set @MyColumnId = columnproperty(object_id("MyTable"), "MyColumn", "ColumnId")

-- Check if it"s changed
declare @MyColumnHasChanged bit
set @MyColumnHasChanged = CHANGE_TRACKING_IS_COLUMN_IN_MASK (MyColumnId, @change_columns_bitmask);

Se CHANGE_TRACKING_IS_COLUMN_IN_MASK me informar se uma coluna foi alterada, como posso escrever um script que me diga quais colunas foram alteradas? eu tem cerca de 50 atributos para cada tabela.

Receio que você precise percorrer todas as colunas nas quais possa estar interessado ... Se isso for muito restritivo, talvez você precise usar outra abordagem de notificação de mudança, como Change Data Capture (CDC) ou gatilhos