轉自: http://www.builder.com.cn/2006/1224/347745.shtml
關於SQL Server資料庫的一切資訊都儲存在它的系統資料表格裡。我懷疑你是否花過比較多的時間來檢查系統資料表格,因為你總是忙於使用者表格。但是,你可能需要偶爾做一點不同尋常的事,例如資料庫所有的觸發器。你可以一個一個地檢查表格,但是如果你有500個表格的話,這可能會消耗相當大的人工。
這就讓sysobjects表格有了用武之地。雖然我不建議你更新這個表格,但是你當然有權對其進行審查。
在大多數情況下,對你最有用的兩個列是sysobjects.name和sysobjects.xtype。前面一個用來列出待考察對象的名字,而後一個用來定義對象的類型,其代碼如下:
- C:檢查約束。
- D:預設的約束
- F:外鍵約束
- L:日誌
- P:預存程序
- PK:主鍵約束
- RF:複製過濾預存程序
- S:系統資料表格
- TR:觸發器
- U:用於表格。
- UQ:獨特的約束。
- V:視圖
- X:被擴充的預存程序
在碰到觸發器的情形下,用來識別觸發器類型的其他三個列是:deltrig、instrig和uptrig。
你可以用下面的命令列出感興趣的所有對象:
SELECT * FROM sysobjects WHERE xtype = <type of interest>
在特殊情況下,也就是在父表格擁有觸發器的情況下,你可能想要用下面這樣的代碼尋找資料庫:
SELECT
Sys2.[name] TableName,
Sys1.[name] TriggerName,
CASE
WHEN Sys1.deltrig > 0 THEN'Delete'
WHEN Sys1.instrig > 0 THEN'Insert'
WHEN Sys1.updtrig > 0 THEN'Update'
END'TriggerType'
FROM
sysobjects Sys1 JOIN sysobjects Sys2 ON Sys1.parent_obj = Sys2.[id]
WHERE Sys1.xtype='TR'
ORDERBY TableName
在SQL Server 2005裡,首選的技術是使用系統檢視表。這種方式會把你的查詢同微軟選擇對系統資料表格進行的任何改變隔絕開來。
下面是一個簡單的例子,它使用了INFORMATION_SCHEMA_TABLES視圖:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
FROMINFORMATION_SCHEMA.TABLES
ORDERBY TABLE_SCHEMA, TABLE_NAME
對於AdventureWorks資料庫或者任何你自己的資料庫,使用這個查詢可以產生一個表格快速列表。
為了說明這些架構查詢的能力,看下面的語句,它們列出所選資料庫裡所有的函數和預存程序。
SELECT*FROMINFORMATION_SCHEMA.ROUTINES
ORDERBY ROUTINE_TYPE, ROUTINE_NAME
市面上有20種這樣的資訊架構視圖。如果你需要將資料庫歸檔,而且無法承擔商業解決方案,例如Red Gate或者Apex提供的方案的話,那麼通過這些視圖和一點點實驗,你就可以讓SQL Server給自己產生文檔了。