2016-04-28 78 views
0

當我編寫包含in子句的sql語句時,如果in語句中的列不存在,它不會引發錯誤,但會忽略in語句並返回結果集。下面Azure SQL服務器IN語句不拋出錯誤

查詢將返回從T1

SELECT * FROM T1 WHERE Id IN(SELECT Id FROM T2) 

所有行是正確的行爲SQL Azure的? 我的本地MS SQL服務器拋出一個錯誤,說該列不存在。

+0

如下答覆中提到的,這不是possible.if你能攝製,你應該用文件CSS – TheGameiswar

+0

的錯誤只是我V12 SQL Azure數據庫測試這一點,並不能重現您問題。你能否添加關於表模式和你正在運行的確切查詢的信息? – cbattlegear

回答

0

這是預期的行爲,與在Sql Server中一樣。基本上,如果在子查詢的FROM子句引用的表中不存在的子查詢中引用了列,但該子查詢的FROM子句引用的表中存在該子查詢,則該查詢將無誤地執行。 SQL Server使用外部查詢中的表名隱式地限定子查詢中的列。 這是記錄在這裏: https://technet.microsoft.com/en-us/library/ms178050(v=sql.105).aspx

2

坦率地說,你所描述的是不可能的。如果IN語句中的列不存在,Azure將拋出異常。結果集不可能被返回。目前,SQL Server執行查詢的方式與Azure v12的方式幾乎沒有區別。每個可能會產生一個不同的執行計劃,但基本上兩者之間幾乎沒有什麼區別。

+0

我知道它應該是,但我可以重現它。如果IN語句中的表沒有名爲Id的列,並且選擇該列,則它將忽略IN語句,除非IN語句中的表沒有任何行,則結果集將爲空。 –

+0

那麼,唯一可以解釋的是兩個表格的模式不一樣。 –