以下 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 语义不要求对每行评估不依赖于当前行的非确定性函数。允许对函数求值一次,并为所有后续行返回相同的值。