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号