共用方式為


SET SHOWPLAN_XML (Transact-SQL)

使 SQL Server 不執行 Transact-SQL 陳述式。 相反地,SQL Server 會以妥善定義的 XML 文件格式來傳回有關如何執行這些陳述式的詳細資訊。

主題連結圖示 Transact-SQL 語法慣例

語法

SET SHOWPLAN_XML { ON | OFF }

備註

SET SHOWPLAN_XML 的設定是在執行階段進行設定,而不是在剖析階段進行設定。

當 SET SHOWPLAN_XML 是 ON 時,SQL Server 會在未執行陳述式的情況下,傳回每個陳述式的執行計畫資訊,且不會執行 Transact-SQL 陳述式。 在這個選項設為 ON 之後,會傳回所有後續 Transact-SQL 陳述式的執行計畫相關資訊,直到這個選項設為 OFF 為止。 例如,如果執行 CREATE TABLE 陳述式時,SET SHOWPLAN_XML 是 ON,SQL Server 會從包含這份相同資料表的後續 SELECT 陳述式傳回錯誤訊息;指定的資料表並不存在。 因此,對這份資料表的後續參考都會失敗。 當 SET SHOWPLAN_XML 是 OFF 時,SQL Server 會在未產生報表的情況下,執行這些陳述式。

SET SHOWPLAN_XML 用來將輸出當做應用程式的 nvarchar(max) 傳回,如 sqlcmd 公用程式,它的 XML 輸出供其他工具繼續用來顯示和處理查詢計畫資訊。

[!附註]

動態管理檢視 sys.dm_exec_query_plan 會以 xml 資料類型傳回 SET SHOWPLAN XML 的相同資訊。 這項資訊是從 sys.dm_exec_query_planquery_plan 資料行傳回。 如需詳細資訊,請參閱<sys.dm_exec_query_plan (Transact-SQL)>。

在預存程序內,不能指定 SET SHOWPLAN_XML。 它必須是批次中的唯一陳述式。

SET SHOWPLAN_XML 會將資訊當作一組 XML 文件傳回。 SET SHOWPLAN_XML ON 陳述式之後的每個批次都會反映在單一文件的輸出中。 每份文件都包含批次內各陳述式的文字,後面接著執行步驟的詳細資料。 文件會顯示估計的成本、資料列數、存取的索引、執行的運算子類型、聯結順序,以及執行計畫的詳細資訊。

在安裝期間,會將包含 SET SHOWPLAN_XML 的 XML 輸出之 XML 結構描述的文件,複製到安裝了 Microsoft SQL Server 之電腦的本機目錄中。 您可以在 SQL Server 安裝檔所在的磁碟機中找到它,位置如下:

\Microsoft SQL Server\110\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

也可以在這個網站找到顯示計畫結構描述。

[!附註]

如果已在 SQL Server Management Studio 中選取了 [包括實際執行計畫],這個 SET 選項將不會產生 XML 顯示計畫輸出。 在使用這個 SET 選項之前,請清除 [包括實際執行計畫] 按鈕。

權限

若要使用 SET SHOWPLAN_XML,您必須有執行 SET SHOWPLAN_XML 所針對的陳述式之充份權限,且您必須有包含所參考物件的所有資料庫之 SHOWPLAN 權限。

若要對於 SELECT、INSERT、UPDATE、DELETE、EXEC stored_procedure 和 EXEC user_defined_function 等陳述式產生顯示計畫,使用者必須:

  • 有執行 Transact-SQL 陳述式的適當權限。

  • 有包含 Transact-SQL 陳述式所參考的物件 (如資料表、檢視等) 之所有資料庫的 SHOWPLAN 權限。

至於所有其他陳述式,例如 DDL、USE database_name、SET、DECLARE、動態 SQL 等等,只需要有執行 Transact-SQL 陳述式的適當權限。

範例

下面兩個陳述式利用 SET SHOWPLAN_XML 設定來顯示 SQL Server 分析和最佳化查詢中之索引使用情況的方式。

第一個查詢在索引資料行的 WHERE 子句中,使用等於比較運算子 (=)。 第二個查詢在 WHERE 子句中使用 LIKE 運算子。 這會強制 SQL Server 使用叢集索引掃描,以及尋找符合 WHERE 子句條件的資料。 第一個索引查詢的 EstimateRowsEstimatedTotalSubtreeCost 屬性中的值比較小,這表示它的處理速度比較快,使用的資源比非索引查詢少。

USE AdventureWorks2012;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID 
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;

請參閱

參考

SET 陳述式 (Transact-SQL)