Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sélection de la fonction GETDATE() deux fois dans une liste de sélection - même valeur pour les deux ?

Non, ils ne sont pas garantis de renvoyer des valeurs identiques à chaque fois. Chaque référence individuelle à GetDate() est une constante d'exécution et gardera sa valeur tout au long de la requête...

SELECT GETDATE()
FROM large_table

renverra la même valeur dans toutes les lignes, quel que soit le temps d'exécution de la requête.

Mais rien ne garantit que différentes références auront la même valeur.

Vous pouvez le voir ci-dessous

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

Exemple de résultats

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