Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zweimaliges Auswählen der GETDATE()-Funktion in einer Auswahlliste – gleicher Wert für beide?

Nein, es ist nicht garantiert, dass sie jedes Mal identische Werte zurückgeben. Jeder einzelne Verweis auf GetDate() ist eine Laufzeitkonstante und behält ihren Wert während der gesamten Abfrage ...

SELECT GETDATE()
FROM large_table

gibt in allen Zeilen denselben Wert zurück, unabhängig davon, wie lange die Ausführung der Abfrage dauert.

Es gibt jedoch keine Garantie dafür, dass verschiedene Referenzen denselben Wert haben.

Sie können dies wie unten sehen

SET NOCOUNT ON;

DECLARE @T TABLE 
(
rownum INT IDENTITY(1,1) PRIMARY KEY,
d1 DATETIME,
d2 DATETIME
)

WHILE (5 > (SELECT COUNT(*) FROM @T WHERE d1 <> d2))
    BEGIN
    DELETE FROM @T WHERE d1 = d2
    INSERT INTO @T 
    SELECT GETDATE(),GETDATE()
    END

SELECT * FROM @T

Beispielergebnisse

rownum      d1                      d2
----------- ----------------------- -----------------------
22381       2011-05-18 12:24:14.433 2011-05-18 12:24:14.437
30912       2011-05-18 12:24:15.420 2011-05-18 12:24:15.423
43234       2011-05-18 12:24:16.717 2011-05-18 12:24:16.720
113360      2011-05-18 12:24:24.210 2011-05-18 12:24:24.213
147855      2011-05-18 12:24:27.817 2011-05-18 12:24:27.820