GetDate()
tidak pernah deterministik. Deterministik berarti akan selalu mengembalikan hasil yang sama ketika melewati parameter yang sama.
Sama dengan rand()
Ini dievaluasi sekali per kolom tetapi setelah dievaluasi tetap sama untuk semua baris.
Lebih mudah untuk melihat perilaku ini dengan rand()
dari getdate()
select top 4 rand(), rand()
from sys.objects
Dikembalikan
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Jika Anda mencoba yang berikut
select top 10 getdate(), getdate()
from sys.objects
dan lihat properti operator ComputeScalar dalam rencana eksekusi aktual, Anda akan melihat bahwa GetDate()
dievaluasi dua kali.
NB:Ada kemungkinan bahwa perilaku evaluasi per kolom ini daripada per kueri berubah setelah SQL 2000 (saya tidak tahu) tetapi bukan itu yang didefinisikan BOL sebagai arti deterministik.