2017-04-08 21 views
1

來到如果我創建一個視圖,如原始表:使用TSQL地發現,在視圖中的列從

create view View1 as 
select Table1.Column1 from Table1 

有沒有辦法找到表1只給出名字視圖1。通過查詢sys.columns來查找View1中的列很容易,其中object_id等於sys.objects中視圖名稱的object_id,但是如何知道視圖中列的來源是什麼?

回答

4

使用@browse_information_mode = 1執行sp_describe_first_result_set。這將返回一個結果集,其中包含每個視圖列的基礎表名和列名以及其他元數據。對於從表達式導出的視圖列,源信息將爲NULL,但其他元數據(例如數據類型信息)將包括在內。

EXEC sp_describe_first_result_set 
     @tsql=N'SELECT * FROM dbo.YourView;' 
    , @params = NULL 
    , @browse_information_mode = 1; 

注意sp_describe_first_result_set在SQL Server 2012中引入了所以這不會在以前的SQL Server版本。

+0

太棒了! 如果原來的視圖聲明 '選擇Table1.Column1,Table2.Column1從表1內加入表2上Table1.Column2 = Table2.Column2' 有沒有辦法告訴大家,表1是基表的「從'是基於? – tdinpsp

+0

@tdinpsp,元數據將顯示視圖公開的列的來源。內連接查詢沒有真正的「基」表概念;結果將是相同的,無論在FROM或JOIN中是否指定了表,並且源將在SELECT語句中指定。 –

相關問題