请帮助我想检查数据库中是否存在存储过程。如果确实存在,那么应该删除该存储过程,如果它不存在,则应该创建存储过程。
请告诉我查询
这是我到目前为止的尝试:
try {
objData.Query = "if exists (select * from dbo.sysobjects
where id = object_id(N'[dbo].["+ ProcName+"]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[ "+ ProcName+"]" ; //
objData.Query = " Drop Proc " + ProcName;
objData.Execute();
} catch
{
}
答案 0 :(得分:4)
IF OBJECT_ID(N'[dbo].[spa_Search]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[spa_Search]
GO
您可以检查OBJECT_ID,它是架构范围对象的对象标识号。
OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )
参数
中的type列
'object_name'
是要使用的对象。 object_name是varchar或nvarchar。如果object_name是varchar,则将其隐式转换为nvarchar。指定数据库和模式名称是可选的。
'object_type'
是架构范围的对象类型。 object_type是varchar或nvarchar。如果object_type是varchar,则将其隐式转换为nvarchar。有关对象类型的列表,请参阅sys.objects (Transact-SQL)返回类型
int <
> 例外
对于空间索引, OBJECT_ID返回NULL。
出错时返回NULL。
用户可以 仅查看用户拥有或在其上的安全性的元数据 用户已被授予权限。这意味着 元数据发射,内置函数,如OBJECT_ID可能会返回 如果用户对该对象没有任何权限,则为NULL。更多 信息,请参阅元数据可见性配置。
快速查看OBJECT_ID
答案 1 :(得分:1)
不确定您的环境......但是在
IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'P' and name = 'TheNameOfYourProcedure')
BEGIN
DROP PROCEDURE TheNameOfYourProcedure
END
GO