SQL點滴17—使用數(shù)據(jù)庫引擎存儲過程,系統(tǒng)視圖查詢,DBA,BI開發(fā)人員必備基礎知識
在開發(fā)過程中會遇到需要弄清楚這個數(shù)據(jù)庫什么時候建的,這個數(shù)據(jù)庫中有多少表,這個存儲過程長的什么樣子等等信息,今天把自己工作過程中經(jīng)常用到的一些數(shù)據(jù)庫引擎存儲過程,系統(tǒng)視圖等等總結一下以備不時之用。下面的知識多是自己總結,有一些參考了MSDN。
sp_help
有時候想盡快查出數(shù)據(jù)庫對象的相關信息,這個存儲過程就很有用了。使用它可以查詢出整個數(shù)據(jù)庫中所有對象的相關信息。直接運行sp_help結果如下圖1,上面是數(shù)據(jù)庫對象,包含系統(tǒng)自定義的表,視圖等等,下面是自定義數(shù)據(jù)類型
圖1
如果我只想找到某一中數(shù)據(jù)類型的長度,精度等信息可以運行sp_help datatypename,如下圖2

圖2
如果我想找出某一個表的相關信息可以運行sp_help tablename,如下圖3

圖3
如圖運行結果的第一個查出表基本信息,第二個查出所有的列,第三個查出主鍵信息,第四個表查出列的標識,第五個返回所在的文件組信息。
如果我想查出一個存儲過程的相關信息可以像上面一樣直接使用sp_help procname,如下圖4

圖4
這里需要注意有時候需要使用單引號將數(shù)據(jù)庫對象包含起來。第一個表查出存儲過程的名稱等信息,第二個查出參數(shù)信息。
sp_helptext
有時候我們需要查出存儲過程長的什么樣子的,雖然可以點擊Script Stored Procedure as,CREATE To,New Query Editor Window找到,如圖5

圖5
但是這樣顯得有點羅嗦,如果有很多的存儲過程我們不可能很快地點擊選中我們想要查的哪一個。如果使用sp_helptext procname就可以很快地找到這些信息,如圖6

圖6
如圖,默認是使用grid顯示文本,也可以使用文本格式,只要點擊 Result to text就可以顯示文本格式。如果你還是覺得這樣不爽,關鍵字沒有顏色,你可以選中所有文本復制到SQL文本編輯器中。同樣你也可以使用sp_helptext查出數(shù)據(jù)庫中的視圖,函數(shù),自定義計算列等對象的文本內(nèi)容。
sp_helpdb
一般我們拿到客戶的數(shù)據(jù)庫服務器端時候,我們首選要搞清楚這個服務器上有多少個數(shù)據(jù)庫,分別是那些用戶創(chuàng)建的等等信息,你也許會直接打開這個數(shù)據(jù)庫用鼠標點擊查看,但是如果有很多的數(shù)據(jù)庫就不那么方便了,這個時候直接運行sp_helpdb就很容易查出來了。如下圖7。

圖7
如圖查詢出了我的數(shù)據(jù)庫軟件中所有的數(shù)據(jù)庫信息。如果我想知道某一個數(shù)據(jù)庫的詳細信息,可以使用sp_helpdb dbname查詢,如圖8。

圖8
如圖第一個表查出這個數(shù)據(jù)庫的基本信息,第二個表查詢得到這個數(shù)據(jù)庫的數(shù)據(jù)庫文件信息等。其他還有很多的數(shù)據(jù)庫引擎存儲過程例如:
sp_helpconstraint可以查出當前數(shù)據(jù)庫中所遇的約束信息。
sp_helpextendedproc可以查詢所有的擴展存儲過程,以及所屬的dll的名稱,這個在上一個隨筆:SQL點滴15—在SQL Server 2008中調(diào)用C#程序中提到過。
sp_helpfile和sp_helpdb dbname的效果差不多,查詢當前數(shù)據(jù)庫的數(shù)據(jù)庫文件信息。
sp_helpfilegroup返回當前數(shù)據(jù)庫的數(shù)據(jù)庫文件關聯(lián)的文件組的信息。
Sp_helpindex tablename返回表或視圖中的索引的信息。
Sp_helplanguage返回數(shù)據(jù)庫中安裝的語言信息。
Sp_helpserver顯示當前已經(jīng)連接的所有服務器的信息。
Sp_helpsort返回服務器默認的排序規(guī)則。
Sys.objects
數(shù)據(jù)庫開發(fā)和application開發(fā)有些不同,沒有一個像CC,VSS,SVN一樣的管理工具來管理代碼,因為所有的代碼都存放在數(shù)據(jù)庫中,不要跟蹤。假設我們要等待數(shù)據(jù)庫設計人員建好表或存儲過程后導入數(shù)據(jù),但是遲遲不見動靜,這時候我們就可以看看數(shù)據(jù)庫中所有的自定義對象,按照最后更新時間來排序。運行下面的語句:select * from sys.objects where type in('U','V','P') order by modify_date
這個語句查出數(shù)據(jù)庫中的所有的用戶表,視圖,存儲過程并按時間排序,這樣就可以看到別人最近添加,修改了那些數(shù)據(jù)庫對象。Sys.objects不包含觸發(fā)器,觸發(fā)器在sys.triggers中。類似的還有sys.tables,sys.views等等。
information_schema
如果我們想快速查詢在這個數(shù)據(jù)庫中是否包含address這樣的字樣的列,并查出它在那個數(shù)據(jù)庫中,那個表中,它的數(shù)據(jù)類型信息等,這時候使用information_schema這個架構信息就很有用了,如下圖9。

圖9
相同的在information_schema這個架構中還有很多的信息例如:
information_schema.tables返回表信息,
information_schema.check_constraints返回check約束信息,
information_schema.views返回視圖信息,
information_schema.routines返回存儲過程信息,還有很多這里不再列舉。
總之SQL Server數(shù)據(jù)庫提供了豐富的對象統(tǒng)計信息供我們使用,上面只是我經(jīng)常用到的一部分,在這里拋磚引玉了。
作者:Tyler Ning
出處:http://www.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯(lián)系冬天里的一把火
浙公網(wǎng)安備 33010602011771號