如何检查sql server中是否存在存储过程

时间:2014-12-23 11:42:30

标签: sql-server sql-server-2008 stored-procedures

请帮助我想检查数据库中是否存在存储过程。如果确实存在,那么应该删除该存储过程,如果它不存在,则应该创建存储过程。

请告诉我查询

这是我到目前为止的尝试:

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 
{
}

2 个答案:

答案 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' ] )
     

参数
  'object_name'
  是要使用的对象。 object_name是varchar或nvarchar。如果object_name是varchar,则将其隐式转换为nvarchar。指定数据库和模式名称是可选的。

  'object_type'
  是架构范围的对象类型。 object_type是varchar或nvarchar。如果object_type是varchar,则将其隐式转换为nvarchar。有关对象类型的列表,请参阅sys.objects (Transact-SQL)

中的type列      

返回类型
int <
> 例外
对于空间索引,   OBJECT_ID返回NULL。
出错时返回NULL。
用户可以   仅查看用户拥有或在其上的安全性的元数据   用户已被授予权限。这意味着   元数据发射,内置函数,如OBJECT_ID可能会返回   如果用户对该对象没有任何权限,则为NULL。更多   信息,请参阅元数据可见性配置。

快速查看OBJECT_ID

答案 1 :(得分:1)

不确定您的环境......但是在 SQL Server 2000 中,您可以尝试此操作,然后启动您的过程脚本:

IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'P' and name = 'TheNameOfYourProcedure')
BEGIN
   DROP PROCEDURE TheNameOfYourProcedure
END
GO