检测表和存储过程等对象是否存在的方法总结

博客前言:

在关于数据库项目中一般都会创建一些table, view, schema, synonym, trigger, function, procedure这些对象。在发布到production的时候通常都会检验这些对象是否已经被创建。下面就来总结一些检测方法。


环境: SQL SERVER 2008


具体方法:

Schema: 

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE NAME = 'schema_nm')
CREATE SCHEMA schema_nm
GO

注意事项:假如该schema已经被创建过,并且已经有对象属于该schema,再删除它就会报错。因此最好不要写drop schema的语句。

Table:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'table_nm') AND type in (N'U'))
DROP TABLE table_nm
GO

View:

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'view_nm'))
DROP VIEW view_nm
GO

Synonym:

IF EXISTS (SELECT * FROM sys.synonyms s JOIN sys.schemas sch ON s.schema_id = sch.schema_id
WHERE s.name = N'synonym_nm' AND sch.name = 'schema_nm')
DROP SYNONYM schema_nm.synonym_nm
GO

Function:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'function_nm') AND TYPE IN (N'FN', N'IF', N'TF', N'FS', N'FT'))

DROP FUNCTION function_nm

GO

Procedure:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'procedure_nm') AND type in (N'P', N'PC'))
DROP PROCEDURE procedure_nm
GO


总结:

监测到对象已经存在后不一定要drop掉,也可以写一些alter这些对象的语句操作,比如为表增加column之类的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值