Оператор getDate()
всегда возвращает одно и то же значение в любом месте одного оператора.
Однако в одном SQL Server 2017 я вижу иначе.
Чтобы настроить это , создайте таблицу и поместите в нее две строки:
CREATE TABLE Test
(
TestDate datetime2(0) NULL,
OtherValue varchar(5) NULL
)
INSERT INTO Test (OtherValue) VALUES ('x')
INSERT INTO Test (OtherValue) VALUES ('x')
Затем выполните этот запрос несколько раз:
SELECT
CASE
WHEN GETDATE() < COALESCE(TestDate, GETDATE())
THEN 'less'
WHEN GETDATE() > COALESCE(TestDate, GETDATE())
THEN 'greater'
ELSE 'same'
END [Compare]
FROM
Test
Обе строки всегда возвращают совпадающие результаты.
Когда я делаю это на SQL Server 2008 R2 (v10.50) и других SQL Server 2017 машинах, результат всегда «одинаков».
Однако на одном из моих SQL Server В 2017 году оно случайным образом изменяется между «одинаковыми», «меньшими» и «большими»:


Почему это происходит? Существует ли параметр сервера, который может вызвать это?
Редактировать :
Использование SYSDATETIME
вместо GETDATE
работает как положено на «плохом» сервере, всегда возвращая «то же самое».
Edit # 2 :
Если я проверю GETDATE
, как указано выше, в столбце, определенном как DATETIME
(что и является GETDATE()
генерирует), то работает как положено. Так что, похоже, это связано с конвертацией между DATETIME
и DATETIME2
.