SQL Server 2008 Management Studio:儘管語法無效,但仍意外執行查詢
SQL Server 2008 Management Studio 有時會表現出有關語法錯誤的反直覺行為。 最近的一個案例涉及一個查詢在子查詢中引用不存在的列(“hs_id”),但查詢執行時沒有錯誤。
查詢的結構是理解此行為的關鍵。外部 DELETE
語句以 Photo
表為目標,使用子查詢來識別要刪除的行。 此子查詢從 HotelSupplier
表中選擇“hs_id”,其中“id = 142”。
錯誤在於子查詢:HotelSupplier
缺少名為「hs_id」的欄位;正確的欄位名稱是「hs_key」。 但是,外部查詢確實包含「hs_id」(在Photo
表中)。 這允許 SQL Server 將子查詢中不明確的「hs_id」引用解析為 Photo
表中的「hs_id」列。
因此,子查詢會根據 Photo
表的資料傳回一組「hs_id」值,然後使用這些值來過濾 DELETE
運算。 儘管最初存在語法錯誤,但查詢的成功執行源自於這種隱式列解析。
這種行為雖然可能令人驚訝,但本質上並不是有問題的。它強調了明確列引用(使用完全限定名稱或別名)的迫切需要,以防止歧義並保持資料完整性。
以上是具有無效列引用的 SQL Server 2008 查詢如何仍能成功執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!