Вы можете попробовать использовать следующий метод, но я предупреждаю вас: это не точно .
Для отображения списка столбцов (имя столбца, имя таблицы, псевдоним таблицы, имя базы данных), после хотя бы одного выполнения , это решение использует кэшированные планы.Следующий пример можно запустить в AdventureWorks2008 .
--First step is to run query
SET ANSI_WARNINGS ON;
GO
--QID:579F1EB7-3E68-4ED6-AED0-22E1890AF6CF
SELECT TOP(10)
h.SalesOrderID
,h.OrderDate
,e.JobTitle
,p.*
,p.FirstName + p.LastName --calculated field
FROM Sales.SalesOrderHeader h
INNER JOIN HumanResources.Employee e ON e.BusinessEntityID = h.SalesPersonID
INNER JOIN Person.Person p ON e.BusinessEntityID = p.BusinessEntityID
GO
--Second step
DECLARE @plan_handle VARBINARY(64)
,@x XML;
SELECT TOP(1)
@plan_handle = qs.plan_handle
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) txt
WHERE txt.text LIKE '--QID:579F1EB7-3E68-4ED6-AED0-22E1890AF6CF%'
AND txt.text NOT LIKE '%dm_exec_query_stats%'
--The last used plan (be careful with concurrent executions)
--Also, for the same query you may have many more plans (with parallelism or without)
ORDER BY qs.last_execution_time DESC;
SELECT @x = f.query_plan
FROM sys.dm_exec_query_plan(@plan_handle) f;
WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
SELECT a.b.value('@Database','NVARCHAR(128)') [Database]
,a.b.value('@Schema','NVARCHAR(128)') [Schema]
,a.b.value('@Table','NVARCHAR(128)') [Table]
,a.b.value('@Alias','NVARCHAR(128)') [Alias]
,a.b.value('@Column','NVARCHAR(128)') [Column]
FROM @x.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/OutputList/ColumnReference') a(b);
В начале целевого запроса я использовал этот комментарий --QID:guid
(идентификатор запроса) для более точной идентификации.Если у вас есть хранимые процедуры, вместо sys.dm_exec_query_stats
можно использовать представление sys.dm_exec_procedure_stats
(я не проверял) для фильтрации по database_id и object_id (идентификатор хранимой процедуры).
Результаты:
Database Schema Table Alias Column
---------------------- ------------------ ------------------ ----- ---------------------
[AdventureWorks2008] [Sales] [SalesOrderHeader] [h] SalesOrderID
[AdventureWorks2008] [Sales] [SalesOrderHeader] [h] OrderDate
[AdventureWorks2008] [HumanResources] [Employee] [e] JobTitle
[AdventureWorks2008] [Person] [Person] [p] BusinessEntityID
[AdventureWorks2008] [Person] [Person] [p] PersonType
[AdventureWorks2008] [Person] [Person] [p] NameStyle
[AdventureWorks2008] [Person] [Person] [p] Title
[AdventureWorks2008] [Person] [Person] [p] FirstName
[AdventureWorks2008] [Person] [Person] [p] MiddleName
[AdventureWorks2008] [Person] [Person] [p] LastName
[AdventureWorks2008] [Person] [Person] [p] Suffix
[AdventureWorks2008] [Person] [Person] [p] EmailPromotion
[AdventureWorks2008] [Person] [Person] [p] AdditionalContactInfo
[AdventureWorks2008] [Person] [Person] [p] Demographics
[AdventureWorks2008] [Person] [Person] [p] rowguid
[AdventureWorks2008] [Person] [Person] [p] ModifiedDate
NULL NULL NULL NULL Expr1006