代码改变世界

object_id的用法

2014-01-07 10:32  很大很老实  阅读(3858)  评论(0编辑  收藏  举报

OBJECT_ID: 
返回数据库对象标识号。

语法 
OBJECT_ID ( 'object' )

参数 
'object'

要使用的对象。object 的数据类型为 char 或 nchar。如果 object 的数据类型是 char,那么隐性将其转换成 nchar。

返回类型 
int

注释 
当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。

1.如果指定一个临时表名,则必须在临时表名前面加上数据库名,例如:

SELECT OBJECT_ID('tempdb..#mytemptable')

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。有关更多信息,请参见表达式和 WHERE。

示例 
2.下面的示例为 pubs 数据库中的 authors 表返回对象 ID。

USE master 
SELECT OBJECT_ID('pubs..authors')

下面是结果集:

----------- 
1977058079

(1 row(s) affected)

 

3.判断数据库对象是否存在

if object_id(N'对象名',N'对象类型') is not null  执行语句

可选对象类型:

AF = 聚合函数 (CLR)

C = CHECK 约束

D = DEFAULT(约束或独立)

F = FOREIGN KEY 约束

FN = SQL 标量函数

FS = 程序集 (CLR) 标量函数

FT = 程序集 (CLR) 表值函数

IF = SQL 内联表值函数

IT = 内部表

P = SQL 存储过程

PC = 程序集 (CLR) 存储过程

PG = 计划指南

PK = PRIMARY KEY 约束

R = 规则(旧式,独立)

RF = 复制筛选过程

S = 系统基表

SN = 同义词

SQ = 服务队列

TA = 程序集 (CLR) DML 触发器

TF = SQL 表值函数

TR = SQL DML 触发器

U = 表(用户定义类型)

UQ = UNIQUE 约束

V = 视图

X = 扩展存储过程

例子 :

删除用户表

if object_id(N'表名',N'U') is not null drop table 表名

删除存储过程

if object_id(N'存储过程名',N'P') is not null drop procedure 存储过程名

4.此方法一般用来判断数据库中本来用没有此对象(procedures,views,functions等),如在新建一个存储过程时我们可以看到这样的语句:

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

事先判断数据库中是否已经存在存储过程usp_send_email,

5.if object_id('tempdb.dbo.#TempTable') is not null 
drop table #TempTable
=
if object_id('tempdb..#TempTable') is not null 
drop table #TempTable
代表中间所有者默认为dbo

注意:object_id就是根据对象名称返回该对象的id.
  object_name是根据对象id返回对象名称.
  select object_id(对象名)等同于:
  select id from sysobjects where name=对象名

   select object_name(id号)等同于:
  select name from sysobjects where id=id号