SQL Server: отслеживание изменений может игнорировать поле, которое изменено с тем же значением?

Я отслеживаю изменения определенных столбцов в таблице (пример: отслеживание CustomerName, Address1 в таблице TestCustomer), используя функции отслеживания изменений в SQL Server. Пока все выглядит хорошо с приведенным ниже кодом, однако заметил, когда я обновляю поле тем же значением, что и customerName=customerName, как показано ниже:

update TestCustomers set customerName=customerName where CustomerID= 2

поэтому запрос все равно покажет мне, что это имя клиента изменилось. Вопрос в следующем: используя функции отслеживания изменений, есть ли поле или способ показать мне, что содержимое этого поля на самом деле не изменилось? и все еще имеет такое же содержание? ниже приведен полный сценарий sql и результат:

create table dbo.TestCustomers
( 
CustomerID int IDENTITY(1,1) NOT NULL,
customerName varchar(255) not null,
 Address1 varchar(255) null,

 CONSTRAINT [PK__TestCustomers__customerid] PRIMARY KEY CLUSTERED ( CustomerID ASC )
) ON [PRIMARY]
GO
insert into  TestCustomers (CustomerName,Address1)
values ('custName1','custaddress1')
insert into  TestCustomers (CustomerName,Address1)
values ('custName2','custaddress2')
insert into  TestCustomers (CustomerName,Address1)
values ('custName3','custaddress3')
insert into  TestCustomers (CustomerName,Address1)
values ('custName4','custaddress4')

ALTER TABLE TestCustomers 
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON)  
select CustomerID,customerName,address1 from TestCustomers  where CustomerID=2
update TestCustomers set customerName=customerName where CustomerID= 2
select CustomerID,customerName,address1 from TestCustomers where CustomerID=2
SELECT
ChVer = SYS_CHANGE_VERSION,
ChCrVer = SYS_CHANGE_CREATION_VERSION,
ChOp = SYS_CHANGE_OPERATION,
CustomerName_Changed = CHANGE_TRACKING_IS_COLUMN_IN_MASK
    (COLUMNPROPERTY(OBJECT_ID('TestCustomers'), 'CustomerName', 'ColumnId')
    ,ChTbl.sys_change_columns),
Address1_Changed = CHANGE_TRACKING_IS_COLUMN_IN_MASK
    (COLUMNPROPERTY(OBJECT_ID('TestCustomers'), 'Address1', 'ColumnId')
    ,ChTbl.sys_change_columns),
CustomerID
FROM CHANGETABLE(CHANGES TestCustomers, 1) AS ChTbl;


CustomerName изменено на то же значение

как вы можете видеть на картинке, несмотря на то, что имя клиента изменено с тем же содержимым, но результат показывает изменения, я хочу увидеть только запись, в которой содержимое действительно изменено! пожалуйста, помогите, если есть способ определить, изменен ли контент или нет, в основном через Change Track! Обратите внимание: нас не интересует, каким было содержимое, нам просто нужно знать, изменилось ли содержимое этого поля или нет! Спасибо


person JPNN    schedule 13.05.2020    source источник


Ответы (1)


Нет. Было бы дополнительной работой выяснить, действительно ли ОБНОВЛЕНИЕ изменяет данные, и Отслеживание изменений оптимизировано для простоты и снижения накладных расходов. Если вам нужна эта информация или вам нужно просмотреть все промежуточные версии строк, тогда Change Data Capture может быть лучшим выбором.

person David Browne - Microsoft    schedule 13.05.2020