天天看點

淺談SQLServer中系統表的應用

1.  master資料庫中sysdatabases表(是SQLServer中所有的資料庫的庫名) :

如果你要查詢的是所有資料庫(使用者/系統):

select * from master..sysdatabases

如果你要查詢的是使用者資料庫,則使用:

select * from master..sysdatabases where dbid > 4

如果你要查詢的是系統資料庫,隻需要把where字句改為dbid < 4即可。

2.對應資料庫中sysobjects表(反應的是相應資料庫中所有的對象):

這個表的用處是最大的,因為它裡面存放的有:表(系統/使用者)、存儲過程(系統/使用者)、視圖、主鍵、外鍵等。

這裡就不一一說明了。

比如你SQLServer中有個資料庫名叫 test,如果要查詢該資料庫中的所有表對象:

select * from test..sysobjects where type = 'u' or type = 's'

這裡的type = 'u'是表示使用者表對象,type = 's'是系統表對象,怎樣單獨查詢使用者表對象或者系統表對象就不用說了吧。

如果你要查詢的是存儲過程當然也分了系統和使用者了:

這個是查詢資料庫中所有存儲過程

select * from test..sysobjects where type = 'p'

如果你要查詢的是使用者存儲過程則加上 and category <> 2 即可。

查詢系統存儲過程就不用說了吧(category = 2 誰不知道。。。)

查詢視圖與查詢存儲過程一樣,比如:

你查詢的是資料庫中所有視圖

select * from test..sysobjects where type = 'v'

如果你要查詢的是使用者視圖則加上 and category <> 2 即可。

其他的就不說了,就把 它們的type給大家說下:

type = ' PK' 表示主鍵。

type = ' D'  外鍵引用。

type = 'UQ' 唯一索引。 

大概就這些了,有什麼不全的請大家補充,謝謝。

3.syscomments表

存放的是所有存儲過程、視圖等(還有什麼不清楚了。。。)。

這裡還是以test資料庫為例,這個表要和sysobjects表相結合用才可,比如查詢的是test資料庫中使用者存儲過程

的内容:

select a.name, b.* from test..sysobjects a,test..syscomments b where a.type = 'p' and a.category <> 2 and a.id = b.id

(語言有點通俗,呵呵,大家别見怪,相信大家都知道)

4 syscolumns表:

存放的什麼大家都知道吧(看名字就知道是列名,地球人都知道)

這裡還是以為test資料庫為例,下面的語句查詢的是test資料庫中所有使用者表的列資訊:

select a.name, b.* from test..sysobjects a,test..syscolumns b where a.type = 'u' and a.id = b.id

好了,不說了,差不多了,一般用得最多的就這幾個表了。。沒寫全的請大家補充下,如果有什麼不明白了,歡迎大家一起探讨。