Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Gör att Microsoft SQL Server inte kör Transact-SQL satser. Istället returnerar SQL Server detaljerad information om hur satserna exekveras.
Transact-SQL syntaxkonventioner
Syntax
SET SHOWPLAN_TEXT { ON | OFF }
Anmärkningar
Inställningen för SET SHOWPLAN_TEXT är inställd vid exekverings- eller körningstid och inte vid parsetid.
När SET SHOWPLAN_TEXT är PÅ returnerar SQL Server exekveringsinformation för varje Transact-SQL-sats utan att köra den. Efter att detta alternativ är PÅ returneras exekveringsplansinformation om alla efterföljande SQL Server-satser tills alternativet är AV. Till exempel, om en CREATE TABLE-sats körs medan SET SHOWPLAN_TEXT är PÅ, returnerar SQL Server ett felmeddelande från ett efterföljande SELECT-uttalande som involverar samma tabell och informerar användaren om att den angivna tabellen inte existerar. Därför misslyckas efterföljande referenser till den här tabellen. När SET SHOWPLAN_TEXT är AV kör SQL Server satser utan att generera en rapport med exekveringsplaninformation.
SET SHOWPLAN_TEXT är avsett att returnera läsbar utdata för Microsoft Win32-kommandopromptsapplikationer såsom sqlcmd-verktyget . SET SHOWPLAN_ALL returnerar mer detaljerad utdata avsedd att användas med program som är utformade för att hantera dess utdata.
SET SHOWPLAN_TEXT och SET SHOWPLAN_ALL kan inte specificeras i en lagrad procedur. De måste vara de enda uttalandena i en batch.
SET SHOWPLAN_TEXT returnerar information som en uppsättning rader som bildar ett hierarkiskt träd som representerar de steg som SQL Server-frågeprocessorn tar när varje sats exekveras. Varje sats som återspeglas i utdatan innehåller en enda rad med texten till satsen, följt av flera rader med detaljer om exekveringsstegen. Tabellen visar kolumnen som utdata innehåller.
| Kolumnnamn | Description |
|---|---|
| StmtText | För rader som inte är av typen PLAN_ROW innehåller denna kolumn texten till Transact-SQL-satsen. För rader av typ PLAN_ROW innehåller denna kolumn en beskrivning av operationen. Denna kolumn innehåller den fysiska operatorn och kan valfritt även innehålla den logiska operatorn. Denna kolumn kan också följas av en beskrivning som bestäms av den fysiska operatorn. För mer information om fysiska operatorer, se kolumnen Argument i SET SHOWPLAN_ALL (Transact-SQL). |
För mer information om de fysiska och logiska operatorerna som kan ses i Showplan-utgången, se Showplan Logical and Physical Operators Reference
Permissions
För att använda SET SHOWPLAN_TEXT måste du ha tillräckliga behörigheter för att köra de satser där SET SHOWPLAN_TEXT körs, och du måste ha SHOWPLAN-behörighet för alla databaser som innehåller refererade objekt.
För satserna SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure och EXEC user_defined_function måste användaren för att skapa en Showplan:
Ha rätt behörighet för att köra Transact-SQL-instruktionerna.
Ha SHOWPLAN-behörighet för alla databaser som innehåller objekt som refereras av Transact-SQL-instruktioner, till exempel tabeller, vyer och så vidare.
För alla andra satser, såsom DDL, USE database_name, SET, DECLARE, dynamisk SQL och så vidare, krävs endast lämpliga behörigheter för att köra Transact-SQL-satserna.
Examples
Detta exempel visar hur index används av SQL Server när den bearbetar satserna.
Detta är frågan som använder ett index:
USE AdventureWorks2022;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.Product
WHERE ProductID = 905;
GO
SET SHOWPLAN_TEXT OFF;
GO
Här är resultatuppsättningen:
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)
Här är frågan som inte använder ett index:
USE AdventureWorks2022;
GO
SET SHOWPLAN_TEXT ON;
GO
SELECT *
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET SHOWPLAN_TEXT OFF;
GO
Här är resultatuppsättningen:
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]))
Se även
Operatorer (Transact-SQL)
SET-instruktioner (Transact-SQL)
SET SHOWPLAN_ALL (Transact-SQL)