下面的查詢不返回結果和SQL Server 2008(在SP1測試)上沒有錯誤,你可以運行它反對任何數據庫,甚至主:括號在SQL Server SELECT查詢中的作用?
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
(SELECT * FROM computed_table)
UNION
(SELECT * FROM another_table_that_does_not_exists)
在SQL Server 2005中,你會得到一個錯誤,因爲表格不存在。
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
SELECT * FROM computed_table
UNION
(SELECT * FROM another_table_that_does_not_exists)
的同樣的問題似乎與真實的表: 你得到,如果你還刪除了一些括號得到一個錯誤,在某些情況下,查詢不返回任何結果,如果你做一些一些細微的變化,像刪除空格或回車,它再次工作...
我認爲可能是在查詢中的問題,因爲在圓括號中的SELECT可能被解釋爲表達式而不是子查詢,作爲在this page。但那至少應該返回一個錯誤。
我錯過了什麼嗎?
編輯26/06/2010:我運行了一些分析會話,結果如下。
對於上面的查詢,事件的序列是:
- 異常(錯誤:208,無效的對象名稱)
- SQL:BatchStarting
- SQL:StmtStarting
- SQL:BatchCompleted
對於無括號的查詢:
- 異常(錯誤:208)
- SQL:BatchStarting
- SQL:StmtStarting
- 異常(錯誤:208)
- 用戶錯誤消息(無效的對象名稱this_table_does_not _exist')
- SQL :BatchCompleted
對於工作查詢:
- SQL:BatchStarting
- SQL:StmtStarting
- 顯示計劃全部
- SQL:StmtCompleted事件
- SQL:BatchCompleted
我也跑與真實的表是造成我同樣的一個查詢問題。的事件的序列是:
- SQL:BatchStarting
- SQL:StmtStarting
- SQL:BatchCompleted
否早 「異常」=>表中存在。 否「SQL:StmtCompleted」=>這意味着發生錯誤,我看不到任何其他原因爲什麼不會引發此事件。 否「Showplan All」=>這意味着錯誤發生在計算執行計劃之前(或何時)。這可能是由cte和括號組合引起的。
我將在下週提出有關Microsoft支持的問題。
您是否嘗試將選擇*改爲實際列名? – DForck42 2010-06-25 19:51:33
多麼美好的問題!首先,在2008年,您也會在第二個陳述中看到錯誤。另外,我沒有看到UNION聲明與刪除聯合的奇怪行爲有關,第二個選擇似乎沒有改變結果。一個有趣的事情 - 在使用第一個陳述時,要求估計執行計劃時,我根本沒有計劃。我現在會運行一個跟蹤。下次再談。 – MaasSql 2010-06-26 03:22:58
您是否還會發布以下所述的代碼:「我還用真實表格運行了其中一個查詢,這導致了同樣的問題。」此外,出於純粹的好奇心,你是否將此視爲發展/生產問題的阻礙者?如果是這樣,似乎解決方法是不遵循cte,然後是括號模式。 – MaasSql 2010-06-26 18:40:41