關於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