您可以尝试使用下一种方法,但我警告您:这并不精确。
为了显示列列表(列名、表名、表别名、数据库名),至少执行一次后,此解决方案使用缓存计划。下一个示例可以在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(查询ID)来进行更精确的识别。
如果你有存储过程,可以使用sys.dm_exec_procedure_stats(我没有测试过)视图来过滤database_id和object_id(存储过程id),而不是sys.dm_exec_query_stats视图。
结果:
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