首页 > 技术文章 > SQL Server 判断各种对象是否存在和sysobjects的关系

haosit 2019-08-06 17:22 原文

一、判断表是否存在

object_id():获取表的ID,其中N表示Unicode类型.可以支持不同语种的对象名

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

二、判断要创建的存储过程名是否存在

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
drop procedure [dbo].[存储过程名]

三、判断要创建的视图名是否存在

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[视图名]') and OBJECTPROPERTY(id, N'IsView') = 1)
-- 删除视图
drop view [dbo].[视图名]

四、判断要创建的函数名是否存在

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))
-- 删除函数
drop function [dbo].[函数名]

五、判断表列是否存在

if col_length('表名', '列名') is not null
select * from sysobjects where id in (select id from syscolumns where name='列名') and name='表名'

六、dbo.sysobjects

  sysobjects是sql server的每个数据库内都有此系统表,它存放该数据库内创建的所有对象

  xtype对象类型:
    C:CHECK 约束,D:DEFAULT 约束,F:FOREIGN KEY 约束,L:日志,FN:标量函数 ,IF:内嵌表函数,P:存储过程,RF:复制筛选存储过程,TR :触发器 ,U:用户表,X:扩展存储过程,S:系统表 ,TF:表函数,UQ:UNIQUE 约束(类型是 K),V:视图,PK:PRIMARY KEY 约束(类型是 K)

推荐阅读