Vor kurzem habe ich einige ziemlich alte gespeicherte Prozeduren durchgesehen, die für SQL Server 2005 geschrieben wurden, und mir ist etwas aufgefallen, das ich nicht verstehe. Es scheint sich um einen Funktionsaufruf zu handeln.
Eine Probe:
SELECT o.name, o.type_desc, o.create_date
FROM sys.objects o
WHERE o.create_date < {fn Now()} -1;
Hiermit werden alle Zeilen angezeigt sys.objects
, die create_date
vor 24 Stunden erstellt wurden.
Wenn ich den Ausführungsplan für diese Abfrage anzeige, {fn Now()}
wird dieser getdate()
durch das Datenbankmodul ersetzt:
SELECT [o].[name],[o].[type_desc],[o].[create_date]
FROM [sys].[objects] [o]
WHERE [o].[create_date]<(getdate()-@1)
Es ist klar, dass die Verwendung {fn Now()}
weitaus stumpfer ist als GetDate()
. Ich jedenfalls werde diese Syntax wie die Pest vermeiden, da sie nicht dokumentiert ist.
quelle