[SQL]Temporal 异常处理经验
解决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))
最新文章
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
- iOS--创建炫酷的渐变色界面
- js多行省略
- oracle数据库备份和还原
- hive 安装教程
- HDU4704+费马小定理
- 图论(二分图,KM算法):HDU 3488 Tour
- PHP错误报告级别及调整方法
- EDIT编辑框
- hdu 4747【线段树-成段更新】.cpp
- TDD中的单元测试
- HDOJ 1260 DP
- Java 哲学家进餐
- 利用TortoiseGit对Coding项目进行版本管理
- NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
- spring注解之@PostConstruct在项目启动时执行指定方法
- ionic打包步骤(安卓)
- Couldn't find an AF_INET address for
- Ruby知识点二:类
- 解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
热门文章
- Vue学习1:实例及生命周期
- proc:基本数据库操作
- 从数据库取出两个同样的字符串用equals比较返回false
- Docker Kubernetes 服务发现原理详解
- Python爬虫(二)——对开封市58同城出租房数据进行分析
- phpstorm 安装yaf代码提示文件
- javax.servlet-api 和 servlet-api 区别
- R apply() 函数和 tapply() 函数
- POJ-3233 Matrix Power Series 矩阵A^1+A^2+A^3...求和转化
- [LeetCode]题15:3Sum