Recientemente, he estado revisando algunos procedimientos almacenados bastante antiguos que fueron escritos para SQL Server 2005, y he notado algo que no entiendo. Parece ser algún tipo de llamada de función.
Una muestra:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Esto mostrará todas las filas de las sys.objects
que tenían create_date
antes de hace 24 horas.
Si visualizo el plan de ejecución para esta consulta, veo que {fn Now()}
es reemplazado getdate()
por el Motor de base de datos:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
Claramente, usar {fn Now()}
es mucho más obtuso que GetDate()
. Por mi parte, evitaré esta sintaxis como la peste, ya que no está documentada.