解决20762 Module 3 课程关于Temporal Table 在 Demo 时的错误

首先该Demo 主要是搭配AdvantureWorks2016 的资料库,使用Person.Person 这个资料表来做展示,看起来没有太大的问题,因此为了在既有的资料表上面要转换为Temporal Table ,该展示采用以下的Script 来进行

今天比较静下心来看这个问题,其实主要的问题有几点:

1.这个既有的Person.Person的资料表是有资料的,因此本来用在CREATE上的时候没有问题,但采用ALTER增加栏位的时候,因为会牵涉到栏位的值是NULL ,因此采用DEFAULT的方式填入预设值。

2. SYSTEM_TIME所填入的栏位值应该是UTC的时间,但是用SYSDATETIME()所取得资料是精确的当地时间,因此以我的环境来说,这个时间会比UTC时间多八个小时,因此会造成异常。

因此如果上述的指令要修改,则可以改成以下的语法,这样就可以顺利地执行了

设定好SYSTEM_TIME 栏位后,就可以透过下面的指令来指定历史资料表

ALTER TABLE Person.Person
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = Person.Person_History));
GO

另外一个在介绍Temporal的时候没有注意到的,就是由于在SQL Server 2016版本提出的时候,针对历史资料的清除时,只能先透过指令将资料表的  SYSTEM_VERSIONING = OFF,此时就可以自己手动去清除历史资料表内过期的资讯了,当删除完毕之后,再重新透过  SYSTEM_VERSIONING = ON的方式,并重新指定历史资料表的名称,这样才可以将历史资料清除。

而这样的方式,在SQL Server 2017 和Azure SQL Database 上,有了更方便的方式,首先要在资料库上面开启历史资料清除的功能

ALTER DATABASE AdvantureWorks2016 SET TEMPORAL_HISTORY_RETENTION ON

接着在资料表上,只要搭配  HISTORY_RETENTION_PERIOD的参数,设定好资料保留的期限,那其他你就不用自己去处理了,在下面范例中,我们设定资料只保留一个月

ALTER TABLE Person.Person
SET (SYSTEM_VERSIONING = ON
(HISTORY_TABLE = Person.Person_History,
HISTORY_RETENTION_PERIOD = MONTHS))

[SQL]Temporal 异常处理经验的更多相关文章

  1. C#异常处理经验(原则与方法)

         本文是异常处理经验性的文章,其实跟C#关系也不大.比较适合刚刚熟悉异常语法,而缺乏实战的读者.当然,经验老练的读者也可指出不足.给予意见.补充说明,一起完善文章,分享更多知识与经验.   1 ...

  2. PL/SQL基础-异常处理

    --*********异常处理一.异常的类型 ORACLE异常分为两种类型:系统异常.自定义异常. 其中系统异常又分为:预定义异常和非预定义异常.1.预定义异常 ORACLE定义了他们的错误编号和异常 ...

  3. 【PL/SQL】异常处理:

    如果在PLSQL块中没有做异常处理,在执行PLSQL块时,出现异常,会传递到调用环境,导致程序运行出错! SCOTT@ prod> declare v_ename emp.ename%type; ...

  4. 使用TRY CATCH进行SQL Server异常处理

    TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了开发人员异常处理能力.没有理由不尝试一下Try.. Catch功能. *      TRY 块 - 包含可能 ...

  5. 谈一谈重 ORM 和 轻 ORM + SQL 的一些经验

    ORM 的本质比较简单,就是对象关系映射 Object Relation Mapping 那很多人都经常会说的一个问题,EF 或 EF Core 好啊,方便啊,不用写麻烦的 SQL ,写 SQL 又要 ...

  6. SQL 存储过程优化经验

    经现场同事反映,他们用的好好的XML 导出工具最近一直报错,经常报数据库连接超时,查看数据库发现已经有100G 以上有空间了. 但导出数据的存储过程里面每次按时间只导1000多条数据,近理说有时间过滤 ...

  7. 浅谈SQL语句优化经验

    (1) 选择最有效率的表名顺序(只在基于规则的seo/' target='_blank'>优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后 ...

  8. (转)SQL Server2005 异常处理机制(Begin try Begin Catch)

    begin try --SQL  end trybegin catch --sql (处理出错动作) end catch我们将可能会出错的sql 写在begin try...end try 之间,若出 ...

  9. Sql server2012转sql server2008步骤经验总结(转)

    wIndows用户登入选择“数据库”右键选择“附加”点击“添加” 打开数据库,右键选中 选择“任务”→“生成脚本”→“选择对象”→“编写整个数据及所有数据库对象的脚本” →“下一步” “设置脚本编写选 ...

随机推荐

  1. SiteCore Experience Analytics-路径分析地图

    路径分析地图 路径分析器是一个应用程序,允许您查看联系人在浏览网站时所采用的各种路径.您可以查看联系人在转换目标并与广告系列互动时所采用的路径,让您深入了解哪些路径为每次转化提供最佳参与价值,以及哪些 ...

  2. https://scrapingclub.com/exercise/detail_sign/

    def parse(self, response): # pattern1 = re.compile('token=(.*?);') # token = pattern1.findall(respon ...

  3. Redis学习-string数据类型

    Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志 型.Key-Value 数据库. redis提供五种数据类型string,hash,list,set及sor ...

  4. java实现zip压缩和解压工具

    引入ant.jar package com.develop.web.util; import java.io.BufferedInputStream; import java.io.File; imp ...

  5. Python RabbitMQ消息持久化

    RabbitMQ消息持久化:就是将队列中的消息永久的存放在队列中.   处理方案: # 在实例化时加入durable=True来确认消息的实例化,客户端服务端都要写 channel.queue_dec ...

  6. python中多继承C3算法研究

    在python的面向对象继承问题中,单继承简单易懂,全部接受传承类的属性,并可添加自带属性, 但是,在多继承情况下,会遇到多个被继承者的顺序问题,以及多次继承后查找前几次继承者需求属性时,可能不易发现 ...

  7. 新建Maven项目建成后本应该有的src/main/java和src/test/java目录并没有出现:

    转自:http://www.cnblogs.com/dong-dong-dong/p/9565466.html 新建Maven项目建成后本应该有的src/main/java和src/test/java ...

  8. C# 控件置于最顶层、最底层

    btn.BringToFront();//将控件放置所有控件最前端 btn.SendToBack();//将控件放置所有控件最底端

  9. 如何通过代码设置WPF控件的字体,颜色

    this.lbTips.Foreground = new SolidColorBrush(Colors.Black); this.lbTips.FontFamily = new FontFamily( ...

  10. NYOJ 542 试制品(第五届河南省省赛)

    解法不唯一,但是还是set好理解而且用着爽,代码注释应该够详细了 #include<stdio.h> #include<string.h> #include<math.h ...