使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

徵狀

在執行 Microsoft SQL Server 2008 的電腦上,請考慮使用下列案例。

案例 1

您可以使用 WITH 語句來指定通用資料表運算式(CTE)。 例如,您執行下列查詢。

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

然後,執行此查詢。

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

在這種情況下,此查詢的快取查詢方案會儲存不正確的 statement_start_offset 與 statement_end_offset 值。 具體來說,您會注意到 statement_end_offset 值小於執行 sys.dm_exec_query_stats 動態管理檢視(DMV)時的 statement_start_offset 值。由於這個問題,當報表假設 statement_start_offset 值必須小於 statement_stop_offset 值時,效能報告可能會失敗。

案例 2

您可以使用 WITH 語句來指定通用資料表運算式,並使用重新編譯選項。 例如,您可以使用下列腳本在 SQL Server 2008 中建立函數。

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

當您執行 [select dbo. function1 ()] 查詢時,您會收到下列錯誤訊息:

目前的命令發生嚴重錯誤。 結果(如果有的話)應該捨棄。

此外,如果 SQL server 遇到大量的伺服器流量,則不需要重新編譯選項,也可能會發生此錯誤。

狀況 3

您可以使用 WITH 語句來指定通用資料表運算式。 在 WITH 語句中,您指定的資料表不存在。 例如,您執行下列查詢。

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

當您執行此查詢時,就不會收到遺失的資料表的錯誤。

原因

發生這些問題的原因是,處理 WITH 語句後的 SELECT 語句無法正常作業。 WITH 語句使用下列語法。

WITH common_table_expression AS(CTE_query_definition)

這個語句接著會建立指派給指定之通用資料表運算式名稱的結果集。 接著,請在此語句中使用 SELECT 語句。 如果第二個語句是括在括弧內,而您嘗試執行 sys.dm_exec_query_stats 的動態管理檢視,您會收到不正確的結果或錯誤。

解決方案

Service pack 資訊 若要解決此問題,請取得最新的 SQL Server 2008 service pack。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

968382 如何取得最新的 SQL Server service pack 2008

因應措施

若要解決這些問題,您必須移除 [通用資料表] 運算式後面的語句中的括弧。 例如,請考慮下列語句,使用此類括弧。

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

若要解決這些問題,請改成下列語句,不使用這些括弧。

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

狀態

Microsoft 已確認這是「適用于」區段中所列之 Microsoft 產品中的問題。這個問題首先是在 SQL Server 2008 Service Pack 2 (SP2)中修正。

其他相關資訊

如需有關如何將 WITH 語句與通用資料表運算式搭配使用的詳細資訊,請造訪以下 MSDN 網頁:

使用 common_table_expression (Transact-sql)如需 sys.dm_exec_query_stats 的詳細資訊,請造訪以下 MSDN 網頁:

sys.dm_exec_query_stats (Transact-sql)

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×