Я отслеживаю изменения определенных столбцов в таблице (пример: отслеживание 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;
как вы можете видеть на картинке, несмотря на то, что имя клиента изменено с тем же содержимым, но результат показывает изменения, я хочу увидеть только запись, в которой содержимое действительно изменено! пожалуйста, помогите, если есть способ определить, изменен ли контент или нет, в основном через Change Track! Обратите внимание: нас не интересует, каким было содержимое, нам просто нужно знать, изменилось ли содержимое этого поля или нет! Спасибо