Aracılığıyla paylaş


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

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

SET SHOWPLAN_TEXT AKONİyken, SQL Server her Transact-SQL ifadesi için çalıştırma bilgisini çalıştırmadan döndürür. 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, SET SHOWPLAN_TEXT ONONURKEN bir CREATE TABLE ifadesi çalıştırılırsa, SQL Server aynı tabloyu içeren sonraki SELECT ifadesinden bir hata mesajı döner; bu mesaj kullanıcıya belirtilen tablonun olmadığını bildirir. Bu nedenle, bu tabloya yapılan sonraki başvurular başarısız olur. SET SHOWPLAN_TEXT KAPALı olduğunda, SQL Server uygulama planı bilgisi içeren bir rapor oluşturmadan ifadeleri çalıştırır.

SET SHOWPLAN_TEXT, SQL Win32 komut mesajı uygulamaları gibi sqlcmd gibi okunabilir çıktı döndürmek için tasarlanmıştır. SET SHOWPLAN_ALL, çıktısını yönetmek için tasarlanmış programlarla kullanılmak üzere tasarlanmış daha ayrıntılı çıktı sağlar.

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

SET SHOWPLAN_TEXT bilgiyi SQL Server sorgu işlemcisinin her ifadeyi çalıştırırken attığı adımları temsil eden hiyerarşik bir ağaç oluşturan bir sıra olarak döndürür. Çı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 SET SHOWPLAN_ALL (Transact-SQL) içindeki Argü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

SET SHOWPLAN_TEXT'yi kullanabilmek için, SET SHOWPLAN_TEXT'nin yürütüldiği ifadeleri çalıştırmak için yeterli izniniz olmalı ve referans nesneleri içeren tüm veritabanları için SHOWPLAN iznine sahip olmalısınız.

SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure ve EXEC user_defined_function ibelemleri 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 Deyimleri (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)