SQL Server資料庫的一切資訊都儲存在它的系統資料表格裡。
在大多數情況下,對你最有用的兩個列是Sysobjects.name和Sysobjects.xtype。
前面一個用來列出待考察對象的名字,而後一個用來定義對象的類型 sysobjects 在資料庫內建立的每個對象(約束、預設值、日誌、規則、預存程序等)在表中佔一行。
只有在 tempdb 內,每個臨時對象才在該表中佔一行。
列名 資料類型 描述
name sysname 對象名。
Id int 對象標識號。
xtype char(2)
物件類型。
1、對象名
對象名(name),可以是下列物件類型中的一種:
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 所有者對象的使用者識別碼。
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 保留。
僅限內部使用。
2、物件類型
物件類型(xtype),Type是在6.0就有的,XType在7.0才出現: Type 物件類型。
可以是下列值之一:
C = CHECK 條件約束
D = 預設值或 DEFAULT 約束
F = FOREIGN KEY 約束
FN = 純量涵式
IF = 內嵌表函數
K = PRIMARY KEY 或 UNIQUE 約束
L = 日誌
P = 預存程序
R = 規則
RF = 複製篩選預存程序
S = 系統資料表
TF = 表函數
TR = 觸發器
U = 使用者表
V = 視圖
X = 擴充預存程序 XType 物件類型。
可以是下列物件類型中的一種:
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 = 擴充預存程序
3、常見FAQ
1、問:object_id(N'中N'代表什麼意思 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[text]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[text]
答:N'' 代表 Unicode類型,National縮寫。可以支援不同語種的對象名
2、 問:select * from dbo.sysobjects where id = object_id(N'[dbo].[usertab]') and OBJECTPROPERTY(id, N'IsUserTable') = 1 這句中的object_id(N'[dbo].[usertab]')和OBJECTPROPERTY(id, N'IsUserTable') = 1 是什麼意思?
答:object_id(N'[dbo].[usertab]'):是得出系統給表usertab分配的唯一ID OBJECTPROPERTY(id, N'IsUserTable') = 1 該對象的屬性是表類型的 objectproperty(id,property)函數的使用,
參考:http://www.cnblogs.com/greateast/archive/2007/07/31/837312.html
3、 問: USE master SELECT * FROM ...sysobjects “...sysobjects”三個句點的首碼是什麼意思?
答: 對資料庫物件名的 Transact-SQL 引用可以是由四部分組成的名稱,格式如下: [ server_name.[[database_name].[owner_name]. | database_name.[owner_name]. | owner_name.] ] object_name 當引用某個特定對象時,不必總是為 SQL Server 指定標識該對象的伺服器、資料庫和所有者。可以省略中間級節點,而使用句點表示這些位置。對象名的有效格式是: server.database.owner.object
server.database..object server..owner.object server...object database.owner.object database..object owner.object
例:
1.找出所有使用者表: select id,name,xtype,crdate from sysobjects where xtype='U' order by name; 或者 select id,name,xtype,crdate from sysobjects where objectproperty(id,N'IsUserTable')=1 order by name;
2.找出所有預存程序 select id,name,xtype,crdate from sysobjects where xtype='P' order by name; 或者 select id,name,xtype,crdate from sysobjects where objectproperty(id,N'IsProcedure')=1 order by name;