Getdate()在不同的时间返回相同的值!怎么了?

Fai*_*aiz 1 sql sql-server

对具有100万条记录的表运行的以下SQL为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())))
Run Code Online (Sandbox Code Playgroud)

这是某种缓存吗?

Rem*_*anu 6

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