Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

sql server 2008 management studio ne vérifie pas la syntaxe de ma requête

Il prend la valeur de hs_id de la requête externe.

Il est parfaitement valide d'avoir une requête qui ne projette aucune colonne de la table sélectionnée dans son select liste.

Par exemple

select 10 from HotelSupplier where id = 142

renverrait un jeu de résultats avec autant de lignes que correspondant à where clause et la valeur 10 pour toutes les lignes.

Les références de colonne non qualifiées sont résolues à partir de la portée la plus proche vers l'extérieur, de sorte que cela est simplement traité comme une sous-requête corrélée.

Le résultat de cette requête sera de supprimer toutes les lignes de Photohs_id n'est pas nul tant que HotelSupplier a au moins une ligne où id =142 (et donc la sous-requête renvoie au moins une ligne)

Cela pourrait être un peu plus clair si vous considérez quel en est l'effet

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

Ceci est bien sûr équivalent à

delete from Photo where Photo.hs_id = Photo.hs_id

Soit dit en passant, c'est de loin le "bogue" le plus courant que j'ai personnellement vu signalé à tort sur Microsoft Connect. Erland Sommarskog l'inclut dans sa liste de souhaits pour SET STRICT_CHECKS ON