Recentemente, estive examinando alguns procedimentos armazenados bastante antigos que foram escritos para o SQL Server 2005 e notei algo que não entendo. Parece ser algum tipo de chamada de função.
Uma amostra:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Isto irá exibir todas as linhas de sys.objects
que têm um create_date
antes de 24 horas atrás.
Se eu exibir o plano de execução para esta consulta, vejo que {fn Now()}
é substituído getdate()
pelo Mecanismo de Banco de Dados:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
Claramente, o uso {fn Now()}
é muito mais obtuso do que GetDate()
. Eu, pelo menos, evitarei essa sintaxe como a praga, pois não é documentada.