Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Akankah GETUTCDATE() mengembalikan nilai yang sama jika digunakan dua kali dalam pernyataan yang sama?

Berkat tautan yang disediakan oleh gbn, saya yakin ini menjawab pertanyaan saya:

Sama dengan rand() Ini dievaluasi sekali per kolom tetapi setelah dievaluasi tetap sama untuk semua baris....lihat properti operator ComputeScalar dalam rencana eksekusi aktual Anda akan melihat bahwa GetDate() dievaluasi dua kali.

Saya memeriksa, dan tampaknya ini masih terjadi dengan cara yang sama di SQL Server 2008:GetUtcDate() dievaluasi dua kali dalam rencana eksekusi. Ini tidak akan menghasilkan hasil yang berbeda per baris, tetapi mungkin saja menghasilkan hasil yang berbeda per kolom jika waktunya tepat.

Sunting

Saya benar-benar dapat membuktikan perilaku ini! Coba ini:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

Dalam eksperimen saya, saya mendapatkan 2011-05-17 20:47:34.247 di kolom pertama dan 2011-05-17 20:47:34.250 di kolom terakhir, menunjukkan perbedaan tiga milidetik sebagai hasil evaluasi semua RAND() s antara panggilan pertama dan kedua ke GETUTCDATE().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2012 meminta data Access 2007 menggunakan kesalahan OPENROWSET

  2. Cara update dan order menggunakan ms sql

  3. Bagaimana cara menetapkan hasil exec ke variabel sql?

  4. Cara mengambil nama bidang dari tabel sementara (SQL Server 2008)

  5. Bagaimana menemukan kueri berkinerja terburuk di SQL Server 2008?