一如既往,我的惊讶将会有一个合理的解释,但在那之前......
我有这个查询
delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)
执行得很好(后来我发现整个照片表都是空的)
但奇怪的是:没有字段hs_id
在 HotelSupplier 中,它被称为hs_key
!
所以当我执行最后一部分时
select hs_id from HotelSupplier where id = 142
单独(用鼠标选择查询的该部分并按 F5),我收到错误,但是当我在in
条款,没有!
我想知道这是正常行为吗?
它正在取值hs_id
从外部查询。
如果查询不从所选表中投影任何列,则这是完全有效的。select
list.
例如
select 10 from HotelSupplier where id = 142
将返回一个结果集,其中包含与匹配的行数一样多的行where
条款和价值10
对于所有行。
不合格的列引用是从最近的范围向外解析的,因此这只是被视为相关子查询。
该查询的结果将是删除其中的所有行Photo
where hs_id
只要 HotelSupplier 至少有一行 id = 142,则不为 null(因此子查询至少返回一行)
如果你考虑一下这样做的效果可能会更清楚一些
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 将其纳入他的wishlist http://www.sommarskog.se/strict_checks.html#columnprefixes for SET STRICT_CHECKS ON
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)