sql >> Database teknologi >  >> RDS >> Sqlserver

sql server 2008 management studio kontrollerer ikke syntaksen for min forespørgsel

Det tager værdien af ​​hs_id fra den ydre forespørgsel.

Det er helt gyldigt at have en forespørgsel, der ikke projicerer nogen kolonner fra den valgte tabel i dens select liste.

For eksempel

select 10 from HotelSupplier where id = 142

ville returnere et resultatsæt med så mange rækker som matchede where klausul og værdien 10 for alle rækker.

Ukvalificerede kolonnereferencer løses fra det nærmeste omfang og udad, så dette bliver bare behandlet som en korreleret underforespørgsel.

Resultatet af denne forespørgsel vil være at slette alle rækker fra Photo hvor hs_id er ikke null, så længe HotelSupplier har mindst én række, hvor id =142 (og så underforespørgslen returnerer mindst én række)

Det er måske lidt klarere, hvis du overvejer, hvad effekten af ​​dette er

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

Dette svarer naturligvis til

delete from Photo where Photo.hs_id = Photo.hs_id

Dette er i øvrigt langt den mest almindelige "bug", som jeg personligt har set fejlagtigt rapporteret på Microsoft Connect. Erland Sommarskog inkluderer det på sin ønskeliste til SET STRICT_CHECKS ON



  1. SQL cast datetime

  2. SQL Server Linked Server Eksempel forespørgsel

  3. SQL Server-pivot vs. multiple join

  4. Sådan laver du en DELETE Pass-Through-forespørgsel i SQL Server