Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

sql server 2008 management studio не проверява синтаксиса на моята заявка

Приема стойността на hs_id от външната заявка.

Напълно валидно е да имате заявка, която не проектира никакви колони от избраната таблица в нейния select списък.

Например

select 10 from HotelSupplier where id = 142

ще върне резултатен набор с толкова редове, колкото съответстват на where клауза и стойността 10 за всички редове.

Неквалифицираните препратки към колони се разрешават от най-близкия обхват навън, така че това просто се третира като корелирана подзаявка.

Резултатът от тази заявка ще бъде изтриване на всички редове от Photo където hs_id не е нула, стига HotelSupplier да има поне един ред, където id =142 (и така подзаявката връща поне един ред)

Може да е малко по-ясно, ако помислите какъв е ефектът от това

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

Това разбира се е еквивалентно на

delete from Photo where Photo.hs_id = Photo.hs_id

Между другото, това е далеч и далеч най-често срещаният „бъг“, който аз лично съм виждал погрешно докладван в Microsoft Connect. Erland Sommarskog го включва в списъка си с желания за 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. Как да архивирате база данни на SQL сървър с помощта на T-SQL

  2. Връщане на списък с тригери в SQL Server

  3. Как да получите отделен списък с думи, използвани във всички полеви записи, използвайки MS SQL?

  4. Python извикване на запаметена процедура на sql-сървър с параметър с таблица

  5. Как да намерите съпоставянето в SQL Server (T-SQL)