表
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
... --其他的字段不常用到。
)
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 = 扩展存储过程
object_id和data_object_id都是表示数据库对象的唯一标志。
object_id是数据库对象的逻辑id,data_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是相等的。当表move和truncate后data_object_id会发生变化。修改表结构不会更改。