首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 系統視圖深度解析:定義來源、資料來源、實用查詢範例與 Resource 隱藏資料庫

     編輯:關於SqlServer

系統視圖(sys.*、INFORMATION_SCHEMA.*)是查詢中繼資料的標準介面。本文探討系統視圖**定義於何處**、**資料從何而來**,並展示三大實用查詢場景(找欄位、看程式碼、格式化輸出),揭秘 Resource 隱藏資料庫。

一、系統視圖無處不在

每個資料庫(含 master、使用者資料庫)的「系統視圖」資料夾下,**名稱、結構完全相同**。
使用者資料庫系統視圖 系統資料庫系統視圖

二、三大實用查詢場景

Q1:知道欄位名「state」,找哪張表擁有它?

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, ORDINAL_POSITION, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'state';

INFORMATION_SCHEMA.COLUMNS 查詢結果

回傳:表名、欄位名、型別、順序、預設值——**資料字典即時查詢**。

Q2:知道預存程序名「CategoryInsert」,快速看定義?

SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('CategoryInsert');

sys.sql_modules 查詢結果

definition 為 NVARCHAR(MAX) 完整定義,無長度截斷。

Q3:sys.sql_modules 輸出無格式化,如何獲得美觀程式碼?

EXEC sp_helptext 'CategoryInsert';

sp_helptext 格式化輸出

sp_helptext 逐行輸出保留縮排換行,**最適合人工閱讀/複製**。

三、系統視圖定義於何處?Resource 隱藏資料庫

使用者資料庫中**未建立**這些視圖,但可直接查詢。真相:定義儲於 **Resource 資料庫**(唯讀、隱藏、隨 SQL Server 服務啟動掛載)。

驗證步驟:

  1. 檔案位置:<安裝路徑>\MSSQL\Binn\mssqlsystemresource.mdf/ldf
    Resource 資料庫檔案位置
  2. 複製檔案至他處(避免鎖定),附加為 Resource_Copy。
    附加 Resource 複本 複製到 E 盤附加
  3. 觀察:系統視圖實際為 Resource 中的**使用者視圖**定義。
    Resource 中的視圖定義

四、系統視圖資料來源:基底系統表

視圖為虛表,**基底表隱藏於系統目錄**。使用者資料庫 sys.objects 看似空空如也:
使用者資料庫 sys.objects 為空

但查詢 sys.objects 卻能看到資料——**實際讀取 Resource 中的基底系統表**(sys.sysschobjs 等內部表),並依當前資料庫安全性過濾。

sys.objects 查詢結果

五、核心系統視圖分類速查

分類代表視圖用途
目錄/結構描述sys.objects, sys.columns, sys.indexes, sys.tables物件結構查詢
執行狀態/DMVsys.dm_exec_*, sys.dm_os_*, sys.dm_db_*效能監控、診斷
安全性sys.database_principals, sys.server_permissions權限稽核
標準資訊綱目INFORMATION_SCHEMA.*ANSI 標準、跨資料庫可攜

總結

系統視圖定義於 **Resource 隱藏資料庫**,資料來源為**內部基底系統表**,透過視圖層提供安全、標準、版本穩定的中繼資料介面。善用 INFORMATION_SCHEMA.COLUMNS 找欄位、sys.sql_modules 看定義、sp_helptext 格式化,是 DBA/開發日常必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved