我正在使用本机时态表功能以及一些自定义列和代码来处理我们的一些表的时态解决方案。
但是,我偶然发现了对SQL:2011标准中某些内容的引用:
来自wikipedia:
截至2011年12月,ISO / IEC 9075,数据库语言SQL:2011第2部分: 表定义中的SQL / Foundation包含子句用于定义 “申请时间段表格”(有效时间表), “系统版本表”(交易时间表)和 “系统版本的应用程序时间段表”(双时态表)
此pdf实际上具有执行此操作的代码(申请时):
MERGE
此代码不会在SSMS中运行。有什么变化使现在的SQL无效吗?看来以前取消了对应用程序时间/位时间表的无证支持的内容已被删除?
答案 0 :(得分:1)
仅因为它在标准中并不意味着它在任何特定的实现中。每个供应商都有一个达到标准覆盖范围的延伸目标,但是目前还没有一个供应商,我怀疑这会在我的一生中发生。
当前,SQL Server支持系统时间,但不支持应用程序时间。可能还有其他供应商在做;我不确定,因为我不遵循所有成熟的RDBMS平台。我知道它已经在SQL Server上引起关注,但是迄今为止还没有正式的公告。
PDF中的示例仅是:支持应用程序时间的平台可以完成 的示例。下一个示例是这个...
INSERT INTO Emp
VALUES (22217,
DATE ‘2010-01-01’,
DATE '2011-11-12', 3)
...由于多种原因,它在SQL Server中也是无效的,并且违反了一些最佳的启动实践。就像您建议的那样,这些东西可能在DB2中都是有效的,但是该标准不应特定于供应商。我的意思是,按照定义,如果没有别的话。
答案 1 :(得分:0)
IBM DB2支持您的要求。可以将SQL标准视为对建议的一种定义的定义,即如果供应商支持某功能,则该功能应至少在SQL 92(这是一种核心)之后才公开。在SQL方言的历史中,有时供应商会超越标准,并且方言也有所不同。供应商在标准化之后以某种非标准的方式实施某功能会有些愚蠢,但有时他们会这样做。左热,右冷;这是一个标准。它反过来起作用,但是人们容易被烧死。
在这种情况下,IBM似乎决定实施该功能,并一口气将其实施方式纳入标准的一部分。微软尚未决定值得他们为之烦恼。