我有一個返回30列的視圖。該視圖由三個表的內部連接創建。我想查詢哪個列是從哪個表中使用查詢而不是逐行瀏覽視圖。 有沒有辦法在SQL Server 2008中做到這一點? 由於事先查看列的表名
Q
查看列的表名
1
A
回答
2
我想找出柱從該表中獲得使用查詢,而不是通過線通過視圖行會
沒有,沒有。
如果數據來自的表很重要,那麼您可以在視圖中使用列的別名來標識它們來自哪些表。
然而,這將會否定首先觀看的理由。
0
您可以查詢列名和表名的執行計劃XML。
在此設置:
create table Table1
(
Table1ID int identity primary key,
Name varchar(10)
)
create table Table2
(
Table2ID int identity primary key,
Table1ID int not null references Table1(Table1ID),
Name varchar(10)
)
go
create view Table_1_2 as
select T1.Table1ID,
T1.Name as Table1Name,
T2.Name as Table2Name
from Table1 as T1
inner join Table2 as T2
on T1.Table1ID = T2.Table1ID
執行對從SQL Server Management Studio中的視圖與查詢 「包括實際的執行計劃」 啓用。
select *
from Table_1_2
where 0 = 1
選擇執行計劃選項卡,右鍵單擊並選擇顯示執行計劃XML。 將XML複製到新的查詢窗口中,將其分配給XML變量並查詢XML以獲取所需的信息。
declare @XML xml = N'<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="11.0.2100.60" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="0" StatementId="1" StatementOptmLevel="TRIVIAL" StatementSubTreeCost="1.57E-07" StatementText="select *
from Table_1_2
where 0 = 1" StatementType="SELECT" QueryHash="0xEBAD405D39FDCB6A" QueryPlanHash="0xAE962A4D575B83FE" RetrievedFromCache="true">
<StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
<QueryPlan DegreeOfParallelism="1" CachedPlanSize="16" CompileTime="0" CompileCPU="0" CompileMemory="112">
<MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="25600" EstimatedPagesCached="25600" EstimatedAvailableDegreeOfParallelism="8" />
<RelOp AvgRowSize="27" EstimateCPU="1.57E-07" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="0" LogicalOp="Constant Scan" NodeId="0" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="1.57E-07">
<OutputList>
<ColumnReference Database="[xx]" Schema="[dbo]" Table="[Table1]" Alias="[T1]" Column="Table1ID" />
<ColumnReference Database="[xx]" Schema="[dbo]" Table="[Table1]" Alias="[T1]" Column="Name" />
<ColumnReference Database="[xx]" Schema="[dbo]" Table="[Table2]" Alias="[T2]" Column="Name" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="0" ActualEndOfScans="1" ActualExecutions="1" />
</RunTimeInformation>
<ConstantScan />
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>';
with xmlnamespaces(default 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
select T.N.value('@Table', 'sysname') as TableName,
T.N.value('@Column', 'sysname') as ColumnName
from @XML.nodes('//ColumnReference') as T(N)
結果:
TableName ColumnName
-------------------- --------------------
[Table1] Table1ID
[Table1] Name
[Table2] Name
相關問題
- 1. 查看列表
- 2. 查看列表
- 3. 檢查,看是否名已在列表
- 4. 查看EventListeners列表
- 5. 列表查看RowDetailsTemplate
- 6. 顯示LINQ列表查看列表顯示名稱
- 7. WPF查看列表查看後退
- 8. Android的列表查看ClickListener
- 9. 存儲和查看列入白名單的聯繫人列表
- 10. 查看頁面查看列表查看行項目
- 11. 列表查看顏色列表
- 12. Android按鈕列表查看列表
- 13. 列表錯誤與Asynctask列表查看
- 14. Backbone子列表查看列表
- 15. 如何查看檢查的列表php?
- 16. 在列表中隱藏列名查看分享點2007
- 17. 在JasperViewer中查看30列的列表
- 18. RStudio多重查看中的列表對象的名稱
- 19. html.actionlink?查看用戶列表
- 20. MVC分頁列表查看
- 21. Android ScrollView VS列表查看
- 22. Linq編輯列表查看
- 23. Android - 多欄列表查看
- 24. 查看SML完整列表
- 25. 無法查看列表
- 26. 點擊列表查看
- 27. 列表查看單行?
- 28. Flex Grid查看列表
- 29. 列表查看和活動
- 30. 彩色列表查看