前言:在SQL Server数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id(‘name’,‘type’)方法。

语法:

object_id( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )
--object_id('objectname','type')或object_id('objectname')

作用:该函数会返回指定对象的ID值,可以在sysobjects表中进行验证。

一、判断数据库对象是否存在

if object_id('对象名') is not null  执行语句
--尽量写上对象类型,避免因为同名现象,而查询出错
--或者
if object_id('对象名','对象类型') is not null  执行语句
--或者
if object_id(N'对象名',N'对象类型') is not null  执行语句
--等同于:select ID from sysobjects where name='对象名' and type='对象类型'

注意:object_id:返回数据库对象标识号。N是显式的将非unicode字符转成unicode字符,它来自 SQL-92 标准中的。在这里,我们不写也行。

可选对象类型如下:

  • 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 = 扩展存储过程

二、举例说明

以下为3种不同写法:

  1. 删除用户表
if object_id(N'表名',N'U') is not null drop table 表名
  1. 删除SQL表值函数
if object_id('函数名','fn') is not null drop function 函数名
  1. 删除存储过程
if object_id('存储过程名') is not null drop procedure 存储过程名
--尽量写上对象类型,避免因为同名现象,而查询出错
--if object_id('存储过程名','P') is not null drop procedure 存储过程名

三、补充知识

在数据库中有一个系统表sysobjects,里面存储了数据库各个对象的信息。可以查询下看看结果。可以看出每个对象都有一个ID,这个表存储了表,存储过程,触发器,视图等相关信息。

注意:字段没有
在这里插入图片描述
例子:

select object_id('student','u')  --会取出表为student的ID值。
--等同于:select ID from sysobjects where name='student' and type='u'

在这里插入图片描述

select object_name(ID)--会取出ID值为ID的对象名。
--等同于:select name from sysobjects where id=ID

在这里插入图片描述

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号

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐