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

Nis*_*han 1 sql-server stored-procedures sql-server-2008

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

请告诉我查询

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

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 
{
}
Run Code Online (Sandbox Code Playgroud)

bry*_*val 5

IF OBJECT_ID(N'[dbo].[spa_Search]', N'P') IS NOT NULL
    DROP PROCEDURE [dbo].[spa_Search]
GO
Run Code Online (Sandbox Code Playgroud)

您可以检查 OBJECT_ID,它是架构范围对象的对象标识号。

OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]   
  object_name' [ ,'object_type' ] )
Run Code Online (Sandbox Code Playgroud)

参数
' 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