Récemment, j'ai parcouru des procédures stockées assez anciennes qui ont été écrites pour SQL Server 2005, et j'ai remarqué quelque chose que je ne comprends pas. Il semble s'agir d'un certain type d'appel de fonction.
Un échantillon:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Cela affichera toutes les lignes sys.objects
qui ont un create_date
avant il y a 24 heures.
Si j'affiche le plan d'exécution de cette requête, je vois qu'il {fn Now()}
est remplacé getdate()
par le moteur de base de données:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
De toute évidence, l'utilisation {fn Now()}
est beaucoup plus obtuse que GetDate()
. Pour ma part, j'éviterai cette syntaxe comme la peste car elle n'est pas documentée.