Comportement de la vérification de la syntaxe de SQL Server 2008 Management Studio
Dans SQL Server 2008 Management Studio, un comportement inattendu a été observé lors de l'exécution d'une requête contenant une référence de colonne non valide. La requête est :
<code class="language-sql">delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)</code>
Bien que "hs_id" ne soit pas un nom de colonne valide dans la table "HotelSupplier" (le nom de colonne correct est "hs_key"), la requête s'exécute avec succès et supprime toutes les lignes de la table "Photo". Cela soulève la question : la requête doit-elle échouer en raison de problèmes de syntaxe ?
La réponse réside dans le concept de sous-requêtes corrélées. L'instruction "DELETE" est associée à une sous-requête, ce qui signifie que la référence "hs_id" dans la sous-requête est résolue en colonne "hs_id" dans la requête externe ("Photo").
Il s'agit d'un comportement valide qui permet aux requêtes de référencer des colonnes dans la table parent sans spécifier explicitement le nom de la table. Dans ce cas, le résultat équivaut à :
<code class="language-sql">delete from Photo where Photo.hs_id in (select Photo.hs_id from HotelSupplier where id = 142)</code>
Le modèle de la requête externe est propagé à la sous-requête, même si la sous-requête elle-même ne projette explicitement aucune colonne.
Par conséquent, il est considéré comme un comportement normal pour SQL Server de permettre à de telles requêtes « non conformes à la syntaxe » de réussir et de corréler les références de colonnes non qualifiées dans la sous-requête à la requête externe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!