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

时间:2009-12-01 07:42:51

标签: 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())))

这是某种缓存吗?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

SqlServer首先执行GETDATE(),然后通过所有行替换该值。