SQL Server資料庫的一切資訊都儲存在它的系統資料表格裡。 在大多數情況下,對你最有用的兩個列是Sysobjects.name和Sysobjects.xtype。前面一個用來列出待考察對象的名字,而後一個用來定義對象的類型 sysobjects 在資料庫內建立的每個對象(約束、預設值、日誌、規則、預存程序等)在表中佔一行。只有在 tempdb 內,每個臨時對象才在該表中佔一行。 列名 資料類型 描述 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 所有者對象的使用者識別碼。 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 保留。 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 = 擴充預存程序 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;
select count(*) from sysobjects where (xtype='U') --查詢一個資料庫總共有多少張表