SQL Server系統表sysobjects介紹與使用


  關於SQL Server數據庫的一切信息都保存在它的系統表格里。我懷疑你是否花過比較多的時間來檢查系統表格,因為你總是忙於用戶表格。但是,你可能需要偶爾做一點不同尋常的事,例如數據庫所有的觸發器。你可以一個一個地檢查表格,但是如果你有500個表格的話,這可能會消耗相當大的人工。

  這就讓sysobjects表格有了用武之地。雖然我不建議你更新這個表格,但是你當然有權對其進行審查。

  sysobjects 表
  在數據庫內創建的每個對象(約束、默認值、日志、規則、存儲過程等)在表中占一行。只有在 tempdb 內,每個臨時對象才在該表中占一行。

如果你看到這段文字,說明您正使用RSS閱讀或轉自《一棵樹-博客園》,原文地址:http://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html

  sysobjects 表結構:

列名 數據類型 描述
name sysname 對象名,常用列
id int 對象標識號
xtype char(2) 對象類型。常用列。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 = 擴展存儲過程
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   保留

 

你可以用下面的命令列出感興趣的所有對象:

SELECT * FROM sysobjects WHERE xtype = <type of interest>
--例如:查看視圖
SELECT * FROM sysobjects WHERE xtype = 'V'

判斷數據庫中是否已經存在某個表,有的話就刪除該表

--方法一:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

--方法二:
if exists (select * from sysobjects where id = object_id(N'表名') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

--方法三:
if(Exists(Select * From SysObjects Where xtype='U' And Name='表名')) 
drop table [dbo].[表名]

以后繼續補充。

某些朋友的一些疑問:

1、問:object_id(N'表名')中N'代表什么意思?

答:N'' 代表 Unicode類型.可以支持不同語種的對象名

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)函數的使用,

3、 問:USE master SELECT * FROM ...SysObjects ” ...sysobjects ” -- 三個句點的前綴是什么意思?

答:對數據庫對象名的 Transact-SQL 引用可以是由四部分組成的名稱,格式如下:[ server_name.[[database_name].[owner_name]. | database_name.[owner_name]. | owner_name.] ] object_name

未完待續(XX尚未成功,后面要靠大家了)……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM