小编ahm*_*der的帖子

CONTAINED IN (@start, @end) VS BETWEEN - 时态表

时态表是 中及以上版本的一个新功能SQL Server 2016,它就像一种SQL Server自动保存表中数据历史记录的有趣方法,但是引入了一些新的 T-SQL 语法SQL Server 2016来支持时态表。我对其中一些人产生了误解。

官方文档来看,其描述BETWEEN <start_date_time> AND <end_date_time>如下:

与上面的 FOR SYSTEM_TIME FROM TO 描述相同,只是返回的行表包含在端点定义的上边界上变为活动状态的行。

其描述CONTAINED IN (<start_date_time>, <end_date_time>)如下:-

返回一个表,其中包含在 CONTAINED IN 参数的两个日期时间值定义的指定时间范围内打开和关闭的所有行版本的值。包括恰好在下边界处变为活动状态或恰好在上边界处停止活动的行。

CONTAINED IN (@start,@end)所以我明白,和BETWEEN子句之间唯一的区别是CONTAINED IN (@start, @end)包括@start边界,而BETWEEN子句则不包括。我对吗?

sql-server sql-server-2016 temporal-tables

3
推荐指数
1
解决办法
1624
查看次数

使列具有唯一性,但有一个例外

我们有一个应用程序,其工作流程涉及向外部组提交信息,然后将用户的ID号输入系统.

出于这个原因,我们允许"00000000"在条目被批准之前将设置的默认值作为暂定值放入id字段中,并且输入永久值.

我正在寻找的本质上是一种确保列保持unique 除了那一个值的方法.

我基本上寻找的是一个UNIQUE约束,但它不是NULL它的空白选项"00000000".我已经考虑过将其作为CHECK约束的一部分,但这似乎是一个很大的性能影响.(假设UNIQUE进行某种索引)

sql t-sql sql-server

1
推荐指数
1
解决办法
413
查看次数