亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Sqlserver 2008 Managementstudio不檢查我的查詢的語法。

Sqlserver 2008 Managementstudio不檢查我的查詢的語法。

交互式愛情 2019-07-04 17:56:22
Sqlserver 2008 Managementstudio不檢查我的查詢的語法。和往常一樣,我的驚訝會有一個合理的解釋,但在那之前.我有個疑問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條款,沒有!我想知道這是否正常的行為?
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

它的價值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

順便說一句,這是我個人在MicrosoftConnect上看到的最常見的“bug”。Erland Sommarskog把它包括在他的愿望清單SET STRICT_CHECKS ON


查看完整回答
反對 回復 2019-07-04
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

這是在表之間保持列名一致的有力論據。正如@Martin所說,當內部查詢中沒有匹配時,SQL語法允許從外部查詢解析列名。在編寫相關子查詢時,這是一件好事,但有時會讓您感到困惑(如這里所示)。


查看完整回答
反對 回復 2019-07-04
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

只是想明確指出示例中的一個良好做法-包括整個查詢過程中每個列的表名(兩個部分標識符)。一般良好的做法,刪除聲明的寶貴實踐!

查看完整回答
反對 回復 2019-07-04
  • 3 回答
  • 0 關注
  • 631 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號