關於SQL Server中的系統表之一 sysobjects
- 2019 年 10 月 4 日
- 筆記
微軟Sql Server數據庫是企業開發管理中最常用的數據庫系統之一。其功能強大而且使用簡單、方便。我們在數據庫中創建數據庫、表、視圖、觸發器、存儲過程、函數等信息。
最常用的功能之一,查詢數據,例如:
1 SELECT [SysAreaId] 2 ,[AreaName] 3 ,[AreaNamePinYin] 4 ,[ShortName] 5 ,[AreaTypeId] 6 ,[Depth] 7 ,[ParentId] 8 ,[PostCode] 9 FROM [SavionPlatMisDB].[dbo].[SysArea]
查詢結果如下圖:

從上圖結果看出,查詢結果是以網狀行、列形式展示出來的。這就是關係型數據庫的特性之一。
那麼我們創建的表、視圖等信息是如何存儲的呢?其實SQL Server數據庫是一種「自解釋」性是存儲介質。我們創建的表、視圖等也是存儲在其系統默認數據庫與表中。
其中之一就是sysobjects表。
SQL Server的每個數據庫內都有此系統表,它存放該數據庫內創建的所有對象,如約束、默認值、日誌、規則、存儲過程等,每個對象在表中佔一行。
以下是此系統表的字段名稱和相關說明。
列名 |
數據類型 |
描述 |
---|---|---|
name |
sysname |
對象名。 |
Id |
int |
對象標識號。 |
xtype |
char(2) |
對象類型。可以是下列對象類型中的一種: C = CHECK 約束D = 默認值或 DEFAULT 約束F = FOREIGN KEY 約束L = 日誌FN = 標量函數IF = 內嵌表函數P = 存儲過程PK = PRIMARY KEY 約束(類型是 K)RF = 複製篩選存儲過程S = 系統表TF = 表函數TR = 觸發器U = 用戶表UQ = UNIQUE 約束(類型是 K)V = 視圖X = 擴展存儲過程 |
uid |
smallint |
所有者對象的用戶 ID。 |
info |
smallint |
保留。僅限內部使用。 |
status |
int |
保留。僅限內部使用。 |
base_schema_ver |
int |
保留。僅限內部使用。 |
replinfo |
int |
保留。供複製使用。 |
parent_obj |
int |
父對象的對象標識號(例如,對於觸發器或約束,該標識號為表 ID)。 |
crdate |
datetime |
對象的創建日期。 |
ftcatid |
smallint |
為全文索引註冊的所有用戶表的全文目錄標識符,對於沒有註冊的所有用戶表則為 0。 |
schema_ver |
int |
版本號,該版本號在每次表的架構更改時都增加。 |
stats_schema_ver |
int |
保留。僅限內部使用。 |
type |
char(2) |
對象類型。可以是下列值之一: C = CHECK 約束D = 默認值或 DEFAULT 約束F = FOREIGN KEY 約束FN = 標量函數IF = 內嵌表函數K = PRIMARY KEY 或 UNIQUE 約束L = 日誌P = 存儲過程R = 規則RF = 複製篩選存儲過程S = 系統表TF = 表函數TR = 觸發器U = 用戶表V = 視圖X = 擴展存儲過程 |
userstat |
smallint |
保留。 |
sysstat |
smallint |
內部狀態信息。 |
indexdel |
smallint |
保留。 |
refdate |
datetime |
留作以後使用。 |
version |
int |
留作以後使用。 |
deltrig |
int |
保留。 |
instrig |
int |
保留。 |
updtrig |
int |
保留。 |
seltrig |
int |
保留。 |
category |
int |
用於發佈、約束和標識。 |
cache |
smallint |
保留。 |
當xtype='U' and status>0代表是用戶建立的表,對象名就是表名,對象ID就是表的ID值。
用以下代碼就可以列出庫misa中所有的用戶建立的表名:
1 select * from dbo.sysobjects 2 where xtype='U'and status>0