MS SQL Server中的sysobjects

摘自:http://www.cnblogs.com/bugY/archive/2011/09/21/2184182.html

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

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

在大多數情況下,對你最有用的兩個列是sysobjects.name和sysobjects.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 = 擴展存儲過程 

在碰到觸發器的情形下,用來識別觸發器類型的其他三個列是:deltrig、instrig和uptrig。

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

SELECT * FROM sysobjects WHERE xtype = <type of interest>

 

select * from sys.objects --在數據庫中創建的每個用戶定義的架構範圍內的對象在該表中均對應一行。

select * from sys.sysobjects--在數據庫中創建的每個對象(例如約束、默認值、日誌、規則以及存儲過程)都對應一行。

"sys.objects是sys.sysobjects的子集"

 

補充:

載自:http://hi.baidu.com/pgzdskwfxbcdiwr/item/d9b22e91b0552bdc7a7f0151

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

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

 

更多:

http://www.linuxso.com/sql/18468.html

 

進一步瞭解:

object_id()和objectproperty()都是系統函數來的:

object_id():返回對象標識號。參數:對象名稱(nvarchar(128))。返回integer
objectproperty():返回對象屬性的屬性值。參數:對象ID(integer),屬相名稱(varchar)。返回integer

可以從MSDN上查找相關信息:

http://msdn.microsoft.com/zh-cn/library/ms190328.aspx

http://msdn.microsoft.com/zh-cn/library/ms176105.aspx

 

N:表示UNICODE類型,可以支持不同語種的對象名

可以從“鏈接管理器”那裏找到:

在連接管理器裏點“可編程性”-》“函數”-》“系統函數”-》“元數據函數”,就能找到object_id和OBJECTPROPERTY

 

 本文轉自:http://www.cnblogs.com/KeenLeung/archive/2012/11/18/2776077.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章