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

Apakah MS-SQL DAN/ATAU bersyarat (melakukan evaluasi hubung singkat)?

Tidak ada jaminan untuk perilaku ini.

Contoh evaluasi korsleting tidak terjadi dengan expr1 AND expr2 adalah

SET STATISTICS IO ON

IF EXISTS(SELECT COUNT(*) FROM master..spt_monitor HAVING COUNT(*)=2)  
AND EXISTS (SELECT COUNT(*) FROM master..spt_values HAVING COUNT(*)=1)
PRINT 'Y'

EXISTS(SELECT COUNT(*) FROM master..spt_monitor HAVING COUNT(*)=2) adalah false (artinya And -ed ekspresi harus False ) tetapi hasil IO menunjukkan kondisi kedua masih dievaluasi.

Table 'spt_values'. Scan count 1, logical reads 14, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'spt_monitor'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server bisa melakukan ini sekalipun. Saya melihat ini dalam pengujian saya

SET STATISTICS IO ON

DECLARE @p1 BIT = NULL

IF ( @p1 = 1
     AND EXISTS(SELECT *
                FROM   master..spt_values) )
  PRINT '1'

ELSE IF ( @p1 = 0
     AND EXISTS(SELECT *
                FROM   master..spt_values) )
  PRINT '2'

Outputnya adalah

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row(s) affected)

Menampilkan spt_values tidak pernah diakses.

Hal ini diimplementasikan dengan kondisi predikat pass through dalam rencana eksekusi. Ada beberapa informasi tentang itu di sini.

Jika predikat passthru bernilai true, join akan mengembalikan baris.... Jika passthrupredicate bernilai false, join akan berjalan normal



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencocokan fuzzy menggunakan T-SQL

  2. T-SQL:Menghapus semua baris duplikat tetapi menyimpannya

  3. Apakah Kunci Unik Server Sql juga merupakan Indeks?

  4. Pernyataan UPDATE bertentangan dengan batasan REFERENCE - Tutorial SQL Server / TSQL Bagian 76

  5. Impor Beberapa File CSV ke SQL Server dari Folder