解决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. GCD(IV)

    死锁:2个任务相互等待造成的. - (void) GCD { NSLog(@"begin"); dispatch_queue_t queue = dispatch_queue_cr ...

  2. EasyUI相关知识点整理

    EasyUI相关知识整理 EasyUI是一种基于jQuery.Angular..Vue和React的用户界面插件集合.easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能.也就 ...

  3. 记账本微信小程序开发四

    学习添加组件 集成日期组件 添加组件 需要在main.js文件中,声明一个data值date与wxml中的{{date}}绑定关联,然后在onLoad中初始化字符串格式的日期值, 处理日期组件点击确认 ...

  4. js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

    Javascript原生有一些事件:copy.paste.cut, 这些事件可以作用的目标元素: 能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<bo ...

  5. js数字转换成财务金额

    function dealNumberToMoney(money){ var fmtAmt = ""; if(money&&money!=null){ money ...

  6. Python 多进程基本语法

    需求:  在有多线程的情况下,我们可以使用线程帮我们处理一些事情,但是在python这里 由于RSA锁的缘故,我们只能够用到一个cpu帮我们处理事情,一个cpu在处理多个线程时,是通过上下文的切换使我 ...

  7. CentOS安装系统安装完成

    一.安装centOS操作系统的相关步骤? 1)第一步:系统安装的方式,选择全新安装,第一行表示安装系统,第三行当用户名密码无法开机或密码忘记的时候启动 2)第二步:是否检查光盘,选择Skip跳过,没事 ...

  8. linux bash tutorial

    bash read-special-keys-in-bash xdotool linux 登录启动顺序

  9. 表达式引擎aviator

    Aviator是一个轻量级.高性能的Java表达式执行引擎, 本文内容主要来自于官方文档 简介 包依赖 使用手册 执行表达式 使用变量 exec 方法 调用函数 自定义函数 编译表达式 访问数组和集合 ...

  10. HDFS常用操作命令

    启动hdfs#start-all.sh查看hdfs的配置文件#cat hdfs-site.sh#hadoop fs -put /soft/jdk /#HDFS上传文件命令查看上传后的文件属性#hado ...