当前位置:  开发笔记 > 数据库 > 正文

TSQL默认最小日期时间

如何解决《TSQL默认最小日期时间》经验,为你挑选了4个好方法。

使用Transact SQL有一种方法可以在列上指定默认日期时间(在create table语句中),以便datetime是datetime值的最小可能值吗?

create table atable
(
  atableID int IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Modified datetime DEFAULT XXXXX??????
)

也许我应该把它留空.



1> Chris..:

据我所知,没有任何函数可以返回它,你将不得不努力设置它.

尝试从0等值转换到最小日期将默认为01-01-1900.

正如之前建议的那样,最好留下设置为NULL(如果需要,可以在阅读时使用ISNULL),或者如果您担心设置正确,甚至可以在表格上设置触发器以设置编辑时的修改日期.

如果您已经准备好了最短的日期,那么:

create table atable
(
  atableID int IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Modified datetime DEFAULT '1753-01-01'
)



2> The Dag..:

我同意"不要使用魔法价值"的观点.但我想指出,有时候采用这种解决方案是合法的.

设置列可以为nullable付出代价:NULL不可索引.像"获取自2010年初以来未被修改的所有记录"之类的查询包括那些从未被修改过的记录.如果我们使用可空列,那么我们就不得不使用[modified] <@cutoffDate OR [modified] IS NULL,这反过来会强制数据库引擎执行表扫描,因为空值没有被索引.而这最后可能是一个问题.

在实践中,如果这不会引入实际的,真实的性能损失,那么应该使用NULL.但是很难知道,除非你知道今天的实际数据量是多少,并且将在所谓的可预见的未来.您还需要知道是否会有大部分具有特殊值的记录 - 如果是这样,那么无论如何都没有必要对其进行索引.

简而言之,通过deafult /经验法则,应该为NULL.但是,如果有大量记录,则经常查询数据,并且只有一小部分记录具有NULL /特殊值,根据此信息定位记录可能会有显着的性能提升(当然,提供了一个创建索引!)和恕我直言,这有时可以证明使用"魔法"值.



3> DJ...:

"也许我应该把它留空"

不要使用魔术数字 - 这是不好的做法 - 如果你没有值,就把它留空

否则,如果您确实需要默认日期 - 请使用发布的其他技术之一来设置默认日期


我倾向于同意.顺便说一句,你有问题的答案吗?
我讨厌当用户尝试重定向用户而不是回答并且然后尝试重定向时.

4> ZXX..:

除非您在一个多世纪以前使用数据库来跟踪历史时间

Modified datetime DEFAULT ((0)) 

非常安全和完美,并且比"1753-01-01"提供更优雅的查询,并且查询效率更高NULL.

但是,由于第一个Modified datetime是插入记录的时间,因此您可以使用:

Modified datetime NOT NULL DEFAULT (GETUTCDATE())

这避免了整个问题,使您的插入更容易和更安全 - 因为你根本不插入它,SQL做家务:-)

有了它,你仍然可以通过使用0作为实际的最小值来获得优雅和快速的查询,因为它总是保证低于任何插入生成GETUTCDATE().

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有