Maison > base de données > tutoriel mysql > Pourquoi SQL Server 2008 Management Studio autorise-t-il l'exécution réussie d'une requête de suppression avec une référence de colonne non valide dans une sous-requête corrélée ?

Pourquoi SQL Server 2008 Management Studio autorise-t-il l'exécution réussie d'une requête de suppression avec une référence de colonne non valide dans une sous-requête corrélée ?

Patricia Arquette
Libérer: 2025-01-20 01:06:10
original
815 Les gens l'ont consulté

Why Does SQL Server 2008 Management Studio Allow a Delete Query with an Invalid Column Reference in a Correlated Subquery to Execute Successfully?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal