【整理】SQLServer查詢各種數據庫對象(表,索引,視圖,圖表,存儲過程等)


首先明確數據庫對象的定義:數據庫對象定義數據庫內容的結構。它們包含在數據庫項目中,數據庫項目還可以包含數據生成計划和腳本。

常見的數據庫對象包括:表,索引,視圖,圖表,缺省值,規則,觸發器,存儲過程,函數等

 

1.sys.objects視圖

數據庫中創建的每一個對象都對應表中的一行,但不包括DDL觸發器,查詢觸發器應該使用sys.triggers

常見的不同類型對象在sys.objects中的區分:

類型 type列 type_desc列
FOREIGN KEY 約束 F FOREIGN_KEY_CONSTRAINT
SQL 標量函數 FN SQL_SCALAR_FUNCTION
SQL 內聯表值函數 IF SQL_INLINE_TABLE_VALUED_FUNCTION
內部表 IT INTERNAL_TABLE
SQL 存儲過程 P SQL_STORED_PROCEDURE
PRIMARY KEY 約束 PK PRIMARY_KEY_CONSTRAINT
系統基表 S SYSTEM_TABLE
SQL 表值函數 TF SQL_TABLE_VALUED_FUNCTION
表(用戶定義類型) U USER_TABLE
UNIQUE 約束 UQ UNIQUE_CONSTRAINT
視圖 V View

 

 

 

 

 

 

 

 

 

 

 

 

 

因此查詢數據庫中包含的對象可以直接查詢sys.objects視圖,比如:查詢數據庫中所有的視圖

1 SELECT * FROM sys.objects WHERE type = 'U'

由於對象id在對應數據庫中是唯一的,可以在查詢時聯結其他表或視圖,比如:查詢數據庫中所有存儲過程及其內容

1 SELECT O.name, M.definition FROM sys.objects O
2 JOIN sys.sql_modules M ON M.object_id = O.object_id
3 WHERE O.type = 'P'

 

2.其他查詢方法

存儲過程有單獨的系統視圖sys.procedures,基本等價於sys.objects WHERE type = 'P'

另外還可以執行系統sp查詢存儲過程:EXEC sp_stored_procedures,不同的是:

sys.procedures (或sys.objects WHERE type = 'P')只包含用戶存儲過程,但執行sp_stored_procedures可以查詢所有種類的存儲過程和除了系統函數之外的所有函數

 

3.sys.modules視圖

為每個包含 SQL 語言定義模塊的系統對象返回一行,類型為 FN、IF、P、PC、TF 和 V 的系統對象具有關聯的 SQL 模塊。

因此,對於這些類型的對象,可以聯結sys.objects查詢對象的語言定義模塊,即其內容。

 

4.sp_helptext需要注意的

sp_helptext是使用頻率非常高的系統存儲過程,使用它可以快速列出指定名稱存儲過程或函數的內容,但是有如下缺點:

①格式化代碼

②當一行長度超過一定后,分行顯示

這樣當修改存儲過程或函數時,如果使用sp_helptext很可能導致格式錯亂,對於下一次的代碼閱讀造成很大的麻煩。

因此,建議sp_helptext僅限於查看存儲過程或函數的內容。

另外,加密的存儲過程不能通過sp_helptext查詢。

本文待補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM