Недавно я просматривал довольно старые хранимые процедуры, написанные для SQL Server 2005, и заметил кое-что, чего не понимаю. Похоже, это какой-то тип вызова функции.
Образец:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Это будет отображать все строки, sys.objects
которые имеют create_date
до 24 часов назад.
Если я отображаю план выполнения для этого запроса, я вижу, что {fn Now()}
он заменен getdate()
компонентом Database Engine:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
Понятно, что использование {fn Now()}
гораздо тупее, чем GetDate()
. Я, например, избегу такого синтаксиса, как чума, поскольку он недокументирован.
источник