我们有一个场景,我们在SQL事务中进行多个操作。完成的步骤顺序(按顺序): -
创建"客户"表
// changingline 1053
// _dataEncryptor = XMLCipher.getInstance(dataEncAlgo, _dataCipher);
_dataEncryptor = XMLCipher.getInstance(dataEncAlgo);
我们在此表上打开了system_versioning。
CREATE TABLE CUSTOMERS
(
ID INT PRIMARY KEY (ID),
NAME VARCHAR (20) NOT NULL,
AGE INT ,
);
在CUSTOMERS表中插入1条记录。
ALTER TABLE CUSTOMERS
ADD VALIDFROM DATETIME2(2) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT CUSTOMERS_VALIDFROM DEFAULT '1900.01.01 00:00:00.00',
VALIDTO DATETIME2(2) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT CUSTOMERS_VALIDTO DEFAULT '9999.12.31 23:59:59.99',
PERIOD FOR SYSTEM_TIME (VALIDFROM, VALIDTO);
更新此记录。
INSERT INTO CUSTOMERS VALUES(1, 'JOHN', 10)
到目前为止,我们在查询时得到了时态表中的历史记录。
现在我们运行一个事务,在该事务中,我们进行更新然后删除。
UPDATE CUSTOMERS SET NAME = 'JOHN1' where ID = 1
理想情况下,我们应该在时态表中获得3条记录,但我们只得到2.我们错过了在事务中发生的更新。
如果我们运行此更新 - 然后 - 删除,没有事务,我们像往常一样获得3条记录。
我们正在使用此声明查询历史表
BEGIN TRANSACTION TemporalDelete
GO
USE KJ1;
GO
update CUSTOMERS set NAME = 'Hemant2' where ID = 1
Go
DELETE FROM CUSTOMERS
WHERE ID = 1;
GO
COMMIT TRANSACTION TemporalDelete;
GO
我们错过了什么吗?
我们如何获得所有记录经历的实际更改,无论是否在交易中?