天天看點

資料庫表的基本資訊,你知道嗎?

用sql doc生成資料庫字典文檔的時候,突然發現有字段描叙(description)這項内容,以前一直沒有注意過,故特意研究了一下,結果越挖越深,就寫了這篇文章。

以前在做資料庫腳本開發時,建立表時,對各個字段的描叙要麼是記錄在文檔裡面,要麼自己建一個表,來儲存這些内容,以便日後開發、維護的友善。其實這些資訊完全可以放在資料庫自己的系統視圖裡面。

對字段的說明、描述一般都放在系統視圖sys.extended_properties中,例如(表dbo.employee的字段department的說明)

其中 當class =1時,major_id它的值是dbo.employee的id,minor_id是department的id(詳細資訊參見msdn),如下圖所示

資料庫表的基本資訊,你知道嗎?
資料庫表的基本資訊,你知道嗎?

其實在mssms 管理器中,選中要添加字段說明的表,單擊右鍵——》修改(08是設計),如下圖所示,增加後,儲存。就會在sys.extended_properties裡添加相應的記錄。

資料庫表的基本資訊,你知道嗎?

當然你也可以用腳本指令添加資料庫表的字段說明

如果已經存在剛才記錄,你再執行上面這段腳本,就會提示:

下面看看工具生成的文檔,工具生成這些資訊肯定是資料庫裡存有對象的這些資訊,下面我們來看看這些資訊都是從何而來吧

資料庫表的基本資訊,你知道嗎?

 這裡先列舉一些儲存表資訊的系統表、視圖吧,可能有些遺漏了,實在太多了,要仔細把這些全部列舉出來還得花費一番功夫

下面來看看屬性那欄的資訊儲存在那些表裡面。如果表是資料庫的預設排序規則,就可以用下面腳本。

如果用某個列的排序規則可用下面的腳本

檢視資料庫的排序規則可以從 sys.databases檢視,而表的某個列的排序規則資訊儲存在syscolumns裡面。上圖的heap, row count資訊我還不知是從哪裡來的。

接下來看看cloumns資訊吧

如圖所示,得到結果與文檔還是有些差別,我通過該腳本實作與文檔一緻的時候,怎麼也找不到nvarchar(30)的30,這個值的出處,後來才發現它其實就是nvarchar的max_length 的一半。

資料庫表的基本資訊,你知道嗎?

修改腳本如下所示 

接下來看看perssion資訊來自何處。 首先我們來看看賦與、收回權限的腳本(我是在sa賬号下運作的)

那麼這些權限資訊儲存在那個系統表或系統視圖中,我查了很多資料,還是沒有查到,呵呵,希望有知道的告訴一聲。但是可以同過系統函數和系統存儲過程得到一些相關的權限設定資訊。

1:系統存儲過程 sp_table_privileges, 它傳回指定的一個或多個表的表權限(如 insert、delete、update、select、references)的清單,表具體參見(msdn)。 

2:系統函數 fn_my_permissions 傳回有效授予主體對安全對象的權限的清單,表具體參見(msdn)

資料庫表的基本資訊,你知道嗎?
資料庫表的基本資訊,你知道嗎?
資料庫表的基本資訊,你知道嗎?

再來看看sql srcipt,好像沒有那個系統表、系統視圖儲存建立表的腳本(如果有的話,算我孤陋寡聞了),也不能通過sp_helptext來得到(存儲過程可以),在