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

sql server 2008 management studio tidak memeriksa sintaks kueri saya

Itu mengambil nilai hs_id dari kueri luar.

Sangat valid untuk memiliki kueri yang tidak memproyeksikan kolom apa pun dari tabel yang dipilih dalam select daftar.

Misalnya

select 10 from HotelSupplier where id = 142

akan mengembalikan set hasil dengan baris sebanyak yang cocok dengan where klausa dan nilai 10 untuk semua baris.

Referensi kolom yang tidak memenuhi syarat diselesaikan dari lingkup terdekat ke luar sehingga ini hanya diperlakukan sebagai sub kueri yang berkorelasi.

Hasil dari kueri ini adalah menghapus semua baris dari Photo dimana hs_id tidak nol selama HotelSupplier memiliki setidaknya satu baris di mana id =142 (dan subquery mengembalikan setidaknya satu baris)

Mungkin sedikit lebih jelas jika Anda mempertimbangkan apa efeknya

delete from Photo  where Photo.hs_id  in (select Photo.hs_id)

Ini tentu saja setara dengan

delete from Photo where Photo.hs_id = Photo.hs_id

Omong-omong, ini adalah "bug" paling umum yang secara pribadi saya lihat dilaporkan secara keliru di Microsoft Connect. Erland Sommarskog memasukkannya ke dalam daftar keinginannya untuk SET STRICT_CHECKS ON



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan OBJECT_NAME() untuk Mendapatkan Nama Objek dari object_id-nya di SQL Server

  2. Apa itu Basis Data, Mengapa Basis Data?

  3. Cara Menampilkan Kolasi Server di SQL Server (T-SQL)

  4. Mana yang lebih berkinerja, CTE atau tabel sementara?

  5. Mengapa fungsi SQL Server Scalar-valued menjadi lebih lambat?