最近,我一直在浏览一些为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()
数据库引擎替换:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
显然,使用{fn Now()}
远比钝GetDate()
。我会避免像瘟疫这样的语法,因为它没有记录。