我的查询......
select * from Contact c
left join Employee e on c.ContactID=e.ContactID
left join [Role] r on e.EmployeeID=r.EmployeeID
where FirstName like '%pete%'
它返回信息,发现它很好。但是,我希望能够看到每个列来自的表,而不必明确地挑选每一列,并对列名称执行'as'语句。这可能吗?
答案 0 :(得分:3)
不,我不认为这是可能的。一般来说,在查询中使用“select *”是一个坏主意,所以你最好输入列名,这可以使用管理工作室等工具来加速。
如果你使用select *这很糟糕,因为
1)如果有人更改了表格,那么查询仍然可以正常运行,但要查找为什么不再阅读数据会更难。
2)您可能会带来比实际需要更多的数据,浪费读取时间和网络带宽。通常很好的做法是只包含必要的列,然后在您发现需要时添加更多列。
答案 1 :(得分:1)
这可能会对你有所帮助。 e的所有列都在分隔符的前面,r的所有列都在后面。
select e.*, '' as [_______], r.* from Contact c
left join Employee e on c.ContactID=e.ContactID
left join [Role] r on e.EmployeeID=r.EmployeeID
where FirstName like '%pete%'
答案 2 :(得分:1)
您可以尝试使用下一种方法,但我警告您:它不准确。
要显示列列表(列名,表名,表别名,数据库名),至少执行一次后,此解决方案将使用缓存计划。下一个示例可以在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_query_stats
(我没有测试过)视图而不是sys.dm_exec_procedure_stats
视图来过滤database_id和object_id(存储过程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