SQL事务中时态表的行为

时间:2017-11-29 08:48:44

标签: sql-server database transactions temporal

我们有一个场景,我们在SQL事务中进行多个操作。完成的步骤顺序(按顺序): -

  1. 创建"客户"表

    // changingline 1053
    // _dataEncryptor = XMLCipher.getInstance(dataEncAlgo, _dataCipher);
    _dataEncryptor = XMLCipher.getInstance(dataEncAlgo);
    
  2. 我们在此表上打开了system_versioning。

    CREATE TABLE CUSTOMERS
    (
       ID   INT              PRIMARY KEY (ID),
       NAME VARCHAR (20)     NOT NULL,
       AGE  INT              ,     
    );
    
  3. 在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);
    
  4. 更新此记录。

    INSERT INTO CUSTOMERS VALUES(1, 'JOHN', 10)
    
  5. 到目前为止,我们在查询时得到了时态表中的历史记录。

  6. Select on temporal table

    1. 现在我们运行一个事务,在该事务中,我们进行更新然后删除。

      UPDATE CUSTOMERS SET NAME = 'JOHN1' where ID = 1
      
    2. 理想情况下,我们应该在时态表中获得3条记录,但我们只得到2.我们错过了在事务中发生的更新。

    3. 如果我们运行此更新 - 然后 - 删除,没有事务,我们像往常一样获得3条记录。

    4. 我们正在使用此声明查询历史表

      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

      我们错过了什么吗?

      我们如何获得所有记录经历的实际更改,无论是否在交易中?

0 个答案:

没有答案