SQL Server中繼資料
- 什麼是中繼資料?
- 怎麼擷取中繼資料?
-
- 使用系統存儲過程
- 使用系統函數
- 使用系統表
- 使用資訊架構視圖
什麼是中繼資料?
中繼資料 (metadata) 最常見的定義為"有關資料的結構資料",或者再簡單一點就是"關于資料的資訊",日常生活中的圖例、圖書館目錄卡和名片等都可以看作是中繼資料。在關系型資料庫管理系統 (DBMS) 中,中繼資料描述了資料的結構和意義。比如在管理、維護 SQL Server 或者是開發資料庫應用程式的時候,我們經常要擷取一些涉及到資料庫架構的資訊:某個資料庫中的表和視圖的個數以及名稱 ;某個表或者視圖中列的個數以及每一列的名稱、資料類型、長度、精度、描述等。
怎麼擷取中繼資料?
示例資料庫AdventureWorks2008:github下載下傳位址
使用系統存儲過程
中繼資料常用存儲過程
系統存儲過程 | 描述 |
---|---|
sp_columns | 傳回指定表或視圖的列的詳細資訊。 |
sp_databases | 傳回目前伺服器上的所有資料庫的基本資訊。 |
sp_fkeys | 若參數為帶有主鍵的表,則傳回包含指向該表的外鍵的所有表;若參數為帶有外鍵的表名,則傳回所有同過主鍵/外鍵關系與該外鍵相關聯的所有表。 |
sp_pkeys | 傳回指定表的主鍵資訊。 |
sp_server_info | 傳回目前伺服器的各種特性及其對應取值。 |
sp_sproc_columns | 傳回指定存儲過程的的輸入、輸出參數的資訊。 |
sp_statistics | 傳回指定的表或索引視圖上的所有索引以及統計的資訊。 |
sp_stored_procedures | 傳回目前資料庫的存儲過程清單,包含系統存儲過程。 |
sp_tables | 傳回目前資料庫的所有表和視圖,包含系統表。 |
示例
USE AdventureWorks2008
GO
execute sp_columns 'Person'
複制

execute sp_tables
複制
使用系統函數
中繼資料函數詳細文檔
系統函數 | 描述 |
---|---|
COLUMNPROPERTY | 傳回有關列或過程參數的資訊,如是否允許空值,是否為計算列等。 |
COL_LENGTH | 傳回指定資料庫的指定屬性值,如是否處于隻讀模式等。 |
DATABASEPROPERTYEX | 傳回指定資料庫的指定選項或屬性的目前設定,如資料庫的狀态、恢複模型等。 |
OBJECT_ID | 傳回指定資料庫對象名的辨別号 |
OBJECT_NAME | 傳回指定資料庫對象辨別号的對象名。 |
OBJECTPROPERTY | 傳回指定資料庫對象辨別号的有關資訊,如是否為表,是否為限制等。 |
fn_listextendedproperty | 傳回資料庫對象的擴充屬性值,如對象描述、格式規則、輸入掩碼等。 |
示例
SELECT COLUMNPROPERTY( OBJECT_ID('Person.Contact'),'LastName','PRECISION')AS 'Column Length';
複制
USE AdventureWorks2008
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
PRINT 'ERROR: UnitMeasure is not a valid object.';
GO
複制
使用系統表
中繼資料常用系統表
系統表 | 描述 |
---|---|
syscolumns | 存儲每個表和視圖中的每一列的資訊以及存儲過程中的每個參數的資訊。 |
syscomments | 存儲包含每個視圖、規則、預設值、觸發器、CHECK 限制、DEFAULT 限制和存儲過程的原始 SQL 文本語句。 |
sysconstraints | 存儲目前資料庫中每一個限制的基本資訊。 |
sysdatabases | 存儲目前伺服器上每一個資料庫的基本資訊。 |
sysindexes | 存儲目前資料庫中的每個索引的資訊。 |
sysobjects | 存儲資料庫内的每個對象(限制、預設值、日志、規則、存儲過程、使用者表等)的基本資訊。 |
sysreferences | 存儲所有包括 FOREIGN KEY 限制的列。 |
systypes | 存儲系統提供的每種資料類型和使用者定義資料類型的詳細資訊。 |
示例
select * from sysobjects where OBJECT_NAME(ID)='Department';
複制
select * from sysdatabases;
複制
使用資訊架構視圖
資訊架構視圖基于 SQL-92 标準中針對架構視圖的定義,這些視圖獨立于系統表,提供了關于 SQL Server 中繼資料的内部視圖。資訊架構視圖的最大優點是,即使我們對系統表進行了重要的修改,應用程式也可以正常地使用這些視圖進行通路。是以對于應用程式來說,隻要是符合 SQL-92 标準的資料庫系統,使用資訊架構視圖總是可以正常工作的。
常用視圖
視圖 | 描述 |
---|---|
INFORMATION_SCHEMA .CHECK_CONSTRAINTS | 傳回有關列或過程參數的資訊,如是否允許空值,是否為計算列等。 |
INFORMATION_SCHEMA .COLUMNS | 傳回目前資料庫中目前使用者可以通路的所有列及其基本資訊。 |
INFORMATION_SCHEMA .CONSTRAINT_COLUMN_USAGE | 傳回目前資料庫中定義了限制的所有列及其限制名。 |
INFORMATION_SCHEMA .CONSTRAINT_TABLE_USAGE | 傳回目前資料庫中定義了限制的所有表及其限制名。 |
INFORMATION_SCHEMA .KEY_COLUMN_USAGE | 傳回目前資料庫中作為主鍵/外鍵限制的所有列。 |
INFORMATION_SCHEMA .SCHEMATA | 傳回目前使用者具有權限的所有資料庫及其基本資訊。 |
INFORMATION_SCHEMA .TABLES | 傳回目前使用者具有權限的目前資料庫中的所有表或者視圖及其基本資訊。 |
INFORMATION_SCHEMA .VIEWS | 傳回目前資料庫中的目前使用者可 |
示例
select * from INFORMATION_SCHEMA .CHECK_CONSTRAINTS;
複制
select * from INFORMATION_SCHEMA .TABLES
複制
原創不易,請勿轉載(本不富裕的通路量雪上加霜 )
部落客首頁:https://blog.csdn.net/qq_45034708