SET SHOWPLAN_TEXT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Microsoft SQL Server'ın Transact-SQL ifadelerini çalıştırmamasına neden olur. Bunun yerine, SQL Server ifadelerin nasıl yürütüldüğüne dair ayrıntılı bilgi sağlar.

Transact-SQL söz dizimi kuralları

Sözdizimi

  
SET SHOWPLAN_TEXT { ON | OFF }  

Açıklamalar

Ayarları SET SHOWPLAN_TEXT işleme veya çalıştırma zamanında ayarlanır, ayrıştırma zamanında değil.

ON'da SET SHOWPLAN_TEXT ise, SQL Server her Transact-SQL ifadesi için yürütme bilgisini döndürür ama çalıştırmaz. Bu seçenek ONON'a ayarlandıktan sonra, tüm sonraki SQL Server ifadeleriyle ilgili yürütme planı bilgileri geri döner, ta ki seçenek KAPALı olana kadar. Örneğin, bir CREATE TABLE ifade ONONDAYKEN SETSET SHOWPLAN_TEXT yürütülürse, SQL Server aynı tabloyu içeren sonraki bir SELECT ifadesinden bir hata mesajı döndürür ve kullanıcıya belirtilen tablonun olmadığını bildirir. Bu nedenle, bu tabloya yapılan sonraki başvurular başarısız olur. KAPALı olduğundaSET SHOWPLAN_TEXT, SQL Server işlem planı bilgisini içeren bir rapor oluşturmadan ifadeleri çalıştırır.

SET SHOWPLAN_TEXTMicrosoft Win32 komut dizisi uygulamaları (örneğin sqlcmd aracı) için okunabilir çıktı döndürmek amacıyla tasarlanmıştır. SET SHOWPLAN_ALL Çıktısını yönetmek için tasarlanmış programlarla kullanılmak üzere tasarlanmış daha ayrıntılı çıktı döndürür.

SET SET SHOWPLAN_TEXT ve SETSET SHOWPLAN_ALL saklanan bir prosedürde belirtilemez. Bir grupta tek ifadeler olmalı.

SET SHOWPLAN_TEXTbilgileri bir dizi satır olarak döndürür ve bu ağaç hiyerarşik ağaç oluşturur ve bu ağaç SQL Server sorgu işlemcisi her ifadeyi çalıştırırken attığı adımları temsil eder. Çıktıda yansıtılan her ifade, ifadenin metnini içeren tek bir satır ve ardından yürütme adımlarının detaylarını içeren birkaç satır içerir. Tablo, çıktının içerdiği sütunu gösterir.

Sütun adı Description
StmtText PLAN_ROW tipine ait olmayan satırlar için, bu sütun Transact-SQL ifadesinin metnini içerir. PLAN_ROW tipindeki satırlar için, bu sütun işlemin tanımını içerir. Bu sütun fiziksel operatörü içerir ve isteğe bağlı olarak mantıksal operatörü de içerebilir. Bu sütunun ardından fiziksel operatör tarafından belirlenen bir açıklama da gelebilir. Fiziksel operatörler hakkında daha fazla bilgi için (Transact-SQL) içindekiSET SHOWPLAN_ALLArgüman sütununa bakınız.

Showplan çıktısında görülebilen fiziksel ve mantıksal operatörler hakkında daha fazla bilgi için Showplan Mantıksal ve Fiziksel Operatörler Referansı'na bakınız.

Permissions

Kullanabilmek SETSET SHOWPLAN_TEXTiçin, çalıştırılan ifadeleri SETSET SHOWPLAN_TEXT çalıştırmak için yeterli iznlere sahip olmanız ve referans nesneleri içeren tüm veritabanları için SHOWPLAN iznine sahip olmanız gerekir.

SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure ve EXEC user_defined_function ifadeleri için, bir Showplan oluşturmak için kullanıcı şunları yapmalıdır:

  • Transact-SQL deyimlerini yürütmek için uygun izinlere sahip olun.

  • tablolar, görünümler vb. Transact-SQL deyimleri tarafından başvurulan nesneleri içeren tüm veritabanlarında SHOWPLAN iznine sahip olun.

DDL, USE database_name, SET, DECLARE, dinamik SQL gibi diğer tüm ifadeler için, Transact-SQL ifadelerini çalıştırmak için yalnızca uygun izinler gereklidir.

Örnekler

Bu örnek, SQL Server tarafından ifadeleri işlerken indekslerin nasıl kullanıldığını gösterir.

Bu, bir indeks kullanılarak yapılan sorgu:

USE AdventureWorks2022;  
GO  
SET SHOWPLAN_TEXT ON;  
GO  
SELECT *  
FROM Production.Product   
WHERE ProductID = 905;  
GO  
SET SHOWPLAN_TEXT OFF;  
GO  

Sonuç kümesi aşağıdadır:

StmtText                                             
---------------------------------------------------  
SELECT *  
FROM Production.Product   
WHERE ProductID = 905;   
  
StmtText                                                                                                                                                                                        
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
|--Clustered Index Seek(OBJECT:([AdventureWorks2022].[Production].[Product].[PK_Product_ProductID]), SEEK:([AdventureWorks2022].[Production].[Product].[ProductID]=CONVERT_IMPLICIT(int,[@1],0)) ORDERED FORWARD)   

İşte indeks kullanmayan sorgu:

USE AdventureWorks2022;  
GO  
SET SHOWPLAN_TEXT ON;  
GO  
SELECT *  
FROM Production.ProductCostHistory  
WHERE StandardCost < 500.00;  
GO  
SET SHOWPLAN_TEXT OFF;  
GO  

Sonuç kümesi aşağıdadır:

StmtText                                                                  
------------------------------------------------------------------------  
SELECT *  
FROM Production.ProductCostHistory  
WHERE StandardCost < 500.00;   
  
StmtText                                                                                                                                                                                                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
|--Clustered Index Scan(OBJECT:([AdventureWorks2022].[Production].[ProductCostHistory].[PK_ProductCostHistory_ProductCostID]), WHERE:([AdventureWorks2022].[Production].[ProductCostHistory].[StandardCost]<[@1]))  

Ayrıca Bkz.

İşleçler (Transact-SQL)
SET İfadeler (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)