使用 GetDate() 作为 SELECT DISTINCT 的一部分不是很好吗?

The*_*dge 2 sql sql-server

我正在审查一些如下所示的 SQL:

SELECT DISTINCT MyField, GETDATE()
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

现在,即使查询花费的时间超过 1 毫秒,我也会收到预期的记录数。并且每条记录的 DateTime 都降低到相同的毫秒,并且实际上产生与记录相同的数字:

SELECT DISTINCT MyField
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我指出任何文档或提供一些其他见解,以了解使这种行为成为 SQL Server 中的行为的“规则”是什么?

Gor*_*off 5

GETDATE()并且RAND()是运行时常量函数的规范示例。这意味着该函数在命令启动时被调用一次,而不是每一行。

文档中提到了这一点:

除了运行时常量非确定性内置 RAND 和 GETDATE 系列之外,调用的数量、顺序和时间将取决于选择的计划。

(据我所知,文档并没有详细说明这一点。)

因此,GETDATE()是查询的常量,而不是为每一行计算。