Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Selezione della funzione GETDATE() due volte in un elenco di selezione:stesso valore per entrambi?

No, non è garantito che restituiscano valori identici ogni volta. Ogni singolo riferimento a GetDate() è una costante di runtime e manterrà il suo valore per tutta la query...

SELECT GETDATE()
FROM large_table

restituirà lo stesso valore in tutte le righe indipendentemente dal tempo necessario per l'esecuzione della query.

Ma non vi è alcuna garanzia che riferimenti diversi abbiano lo stesso valore.

Puoi vederlo come sotto

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

Risultati di esempio

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