2010-03-12 92 views
2

如何在SQL Server 2008中顯示數據庫中所有視圖的內容?是否有任何新的系統視圖來做同樣的事情?在SQL Server2008中顯示視圖內容

+0

你打開它們...... – 2010-03-12 05:20:59

+0

你是什麼意思「檢查內容」?檢查它是什麼?檢查它運行?查找某些列? – Thomas 2010-03-12 05:21:49

+0

我想查看我的db中所有視圖的定義 – Veejay 2010-03-12 05:38:34

回答

4

使用Management Studio中的最簡單方法是:

  1. 查找Management Studio中
  2. 在數據庫的數據庫,點擊查看文件夾上應該顯示在左側(官方稱爲對象資源管理器)你列出你右邊的觀點。如果沒有,您想要轉到視圖菜單並選擇對象詳細信息。
  3. 選擇所有視圖。所選擇的看法
  4. 右擊並選擇「腳本視圖作爲」 - >創建爲 - >新的查詢窗口

這將打開一個窗口,你選擇的一切的視圖定義。

編輯:如果您想查詢你的所有視圖定義你能這樣做:如果你改變你的輸出文本,而不是電網

Select VIEW_DEFINITION 
From INFORMATION_SCHEMA.VIEWS 

,它將給你的所有的視圖列表。

正如gbn指出的那樣,如果它是您想要的模式,並且如果某個開發人員足夠瘋狂以創建超過4k個字符的視圖,那麼INFORMATION_SCHEMA視圖將針對該視圖的模式返回null。所以,在這種情況下使用系統表會更合適。 GBN的解決方案的一個變化,這是類似於什麼短信做幕後是:

Select smv.definition 
FROM sys.all_views AS v 
    JOIN sys.sql_modules AS smv 
     ON smv.object_id = v.object_id 
+0

Thanks..can你可以共享T-SQL腳本來一次顯示所有的視圖定義嗎? – Veejay 2010-03-12 05:45:31

+0

完成。你可以通過INFORMATION_SCHEMA.VIEWS – Thomas 2010-03-12 05:51:51

+0

查詢它們哪個更好? sys.views或INFORMATION_SCHEMA.VIEWS? – Veejay 2010-03-12 06:01:33

5
SELECT 
    O.name, SM.definition 
FROM 
    sys.objects O 
    JOIN 
    sys.sql_modules SM ON o.object_id = SM.object_id 
WHERE 
    o.type = 'V' 

「INFORMATION_SCHEMA」具有爲nvarchar(4000),這將導致視圖定義的截斷的列的限制,當你選擇它:不要使用它

+0

不正確。根據BOL的說法:「如果定義的長度大於nvarchar(4000),則此列爲NULL,否則此列爲視圖定義文本。」所以你不應該截斷。如果您對4k以上的觀點是另一回事。 – Thomas 2010-03-12 07:48:32

+0

也許文檔已過時,因爲我有一個視圖,其定義大於4000並且被截斷。 – pisaruk 2014-02-10 19:13:31

+0

@Thomas:隨時爲您的觀點使用INFORMATION_SCHEMA,因爲它們通常較小。但是,對於存儲過程(通常會更長),那麼我會使用sys.sql_modules。但爲什麼不對所有代碼使用相同的方法?在現實生活中,我想100%確定我得到正確的數據。 BOL數據類型仍然是nvarchar(4000) – gbn 2014-02-11 08:00:35

0

添加此sqlcmd腳本爲他人作爲4k限制並不好玩。感謝這個線程。

-- :r meta_show_view_definition.sql 
-- need user logon with ALTER permissions 
-- :setvar ObjectName "<string>" 
set nocount on 

declare @sql varchar(max) 
:out $(ObjectName).view.dump.sql 

set @sql = ' 
select obj.name, sm.definition 
from sys.objects obj 
join sys.sql_modules sm on obj.object_id = sm.object_id 
where 
    obj.type = "V" and 
    upper(obj.name) = upper("' + '$(ObjectName)' + '")' 

exec (@sql) 
go 

:out stdout 
set nocount off