sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:intrigado por GETDATE()

GetDate() nunca fue determinista. Determinista significa que siempre devolverá el mismo resultado cuando se le pasen los mismos parámetros.

En común con rand() Se evalúa una vez por columna pero una vez evaluado sigue siendo el mismo para todas las filas.

Es más fácil ver este comportamiento con rand() que getdate()

select top 4 rand(), rand()
from sys.objects

Devuelto

---------------------- ----------------------
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363

Si intenta lo siguiente

select top 10 getdate(), getdate()
from sys.objects

y mire las propiedades del operador ComputeScalar en el plan de ejecución real, verá que GetDate() se evalúa dos veces.

NB:Es posible que este comportamiento de evaluación por columna en lugar de por consulta cambió después de SQL 2000 (no lo sé), pero eso no es lo que BOL define como el significado de determinista.