Getdate() 在不同时间返回相同的值!发生什么事了?

问题描述 投票:0回答:3

以下 SQL 对包含 100 万条记录的表运行,为 Date1 和 Date2 列提供相同的值,执行时间为 38 秒。这是预期的行为吗?为什么?

CREATE FUNCTION Fn_Test(@a decimal)RETURNS TABLE
AS
RETURN
(
    SELECT @a Parameter, Getdate() Date1, PartitionTest.*
    FROM PartitionTest
);

SELECT *, GETDATE() Date2 FROM Fn_Test(RAND(DATEPART(s,GETDATE())))

这是某种缓存吗?

sql sql-server
3个回答
7
投票

是的。 SQL 语义不要求对每行评估不依赖于当前行的非确定性函数。允许对函数求值一次,并为所有后续行返回相同的值。


0
投票
GETDATE()(和 CURRENT_TIMESTAMP)返回事务开始的时间戳


0
投票
SqlServer 首先执行 GETDATE(),然后替换所有行中的值。

© www.soinside.com 2019 - 2024. All rights reserved.