SQL Server使用object_id超详细总结,你要的这里都有!
前言:在SQL Server数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id(‘name’,‘type’)方法。语法:object_id( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )--object_id('objectn
前言:在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种不同写法:
- 删除用户表
if object_id(N'表名',N'U') is not null drop table 表名
- 删除SQL表值函数
if object_id('函数名','fn') is not null drop function 函数名
- 删除存储过程
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号
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)