Di recente ho esaminato alcune stored procedure piuttosto vecchie scritte per SQL Server 2005 e ho notato qualcosa che non capisco. Sembra essere un tipo di chiamata di funzione.
Un campione:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Questo mostrerà tutte le righe sys.objects
che hanno avuto create_date
prima di 24 ore fa.
Se visualizzo il piano di esecuzione per questa query, vedo che {fn Now()}
viene sostituito getdate()
dal Motore di database:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
Chiaramente, l'utilizzo {fn Now()}
è molto più ottuso di GetDate()
. Io per primo eviterò questa sintassi come la peste poiché non è documentata.