sql >> Databáze >  >> RDS >> Sqlserver

sql server 2008 management studio nekontroluje syntaxi mého dotazu

Přebírá hodnotu hs_id z vnějšího dotazu.

Je naprosto platné mít dotaz, který nepromítá žádné sloupce z vybrané tabulky ve svém select seznam.

Například

select 10 from HotelSupplier where id = 142

vrátí sadu výsledků s tolika řádky, kolik odpovídá where klauzule a hodnotu 10 pro všechny řádky.

Nekvalifikované odkazy na sloupce jsou vyřešeny od nejbližšího rozsahu směrem ven, takže se s tím bude zacházet jako s korelovaným dílčím dotazem.

Výsledkem tohoto dotazu bude smazání všech řádků z Photo kde hs_id není null, pokud má HotelSupplier alespoň jeden řádek, kde id =142 (a tak poddotaz vrátí alespoň jeden řádek)

Mohlo by to být trochu jasnější, když zvážíte, jaký to má efekt

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

To je samozřejmě ekvivalentní s

delete from Photo where Photo.hs_id = Photo.hs_id

Mimochodem, toto je zdaleka nejběžnější „chyba“, kterou jsem osobně viděl chybně hlášenou na Microsoft Connect. Erland Sommarskog to zahrnul do svého seznamu přání pro SET STRICT_CHECKS ON



  1. Překlenutí mezery v Azure:Spravované instance

  2. Jak importovat databázi SQL Server do Accessu 2016

  3. Relační algebra

  4. Dobrá praxe pro otevírání/uzavření připojení v aplikaci asp.net?