Getdate () возвращает одно и то же значение в разное время! Что происходит? - PullRequest
1 голос
/ 01 декабря 2009

Следующий запуск SQL для таблицы с 1 миллионом записей дает одинаковое значение для столбцов 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 ]

6 голосов
/ 01 декабря 2009

Да. Семантика SQL не требует, чтобы недетерминированная функция, которая не зависела от текущей строки, которая должна оцениваться для каждой строки . Разрешается оценивать функцию один раз и возвращать одно и то же значение для всех последующих строк.

0 голосов
/ 01 декабря 2009

SqlServer сначала выполняет GETDATE (), а затем заменяет значение через все строки.

0 голосов
/ 01 декабря 2009

GETDATE () (и CURRENT_TIMESTAMP) возвращают метку времени начала транзакции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...