檢查數據庫對象是否存在

if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

   

臨時表

if object_id('tempdb..##temp') is not null

if exists (select * from sysobjects where id = object_id(N'tempdb.##temp') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

   

存儲過程

if exists(select * from sysobjects where id=object_id('[dbo].[sp_create_storeCount]') and xtype='P') --sql server2000

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AccountHz]') AND type in (N'P', N'PC')) --sql server2005

   

視圖

IF EXISTS (SELECT * FROM sysviews WHERE object_id = '[dbo].[視圖名]' --sql server2000

IF EXISTS (SELECT * FROM sys.views WHERE object_id = '[dbo].[視圖名]' --sql server2005

   

   

sysObjects (

Name sysname, --object 名稱

id int, --object id

xtype char(2), -- object 類型

type char(2), -- Object 類型(與xtype 似乎一模一樣)

uid smallint, -- object 所有者的ID

... --其他的字段不常用到。

)

sysobjectsxtype 代表的對象類型。可以是下列對象類型中的一種:

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 = 擴展存儲過程

object_iddata_object_id都是表示數據庫對象的唯一標誌。

object_id是數據庫對象的邏輯iddata_object_id是數據庫對象的物理id

如果一些object沒有物理屬性的話那它就不存在data_object_id,例如procedure,function,package,data type,db link,mv定義,view定義,臨時表,分區表定義等等這些object都是沒有對應着某個segment,因此它們的data_object_id都爲空。

   

當一個表建立的時候,他的object_id data_object_id是相等的。當表movetruncatedata_object_id會發生變化。修改表結構不會更改。

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