36

简单的问题,正如标题所示:

通过首先检查 SP 是否存在,在 SQL Server 2000 中删除存储过程 (SP) 的语法是什么?

请提供完整代码。

4

6 回答 6

60

Microsoft 建议使用该object_id()功能,如下所示:

IF EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[YourProcedure]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[YourProcedure]
GO

.
object_id()有助于解决所有者冲突。如果您这样做
SELECT name FROM sysobjects WHERE name = 'my_procedure' ,您可能会看到许多具有相同名称的不同程序——所有这些程序都针对不同的所有者。

但是,SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]')如果存在多个该名称的过程,则只会向您显示当前所有者/用户的那个。

不过,始终指定对象所有者(默认为dbo)。这不仅避免了令人讨厌的副作用,而且速度也更快。

于 2010-08-03T00:10:06.477 回答
9

无需进入系统表的稍微简单的方法:

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
于 2013-09-18T13:31:48.500 回答
9

不适用于 SQL Server 2000,但从 SQL Server 2016 开始,您可以使用 IF EXISTS 语法:

DROP PROCEDURE IF EXISTS [sp_ProcName]
于 2019-12-03T22:33:23.660 回答
3

像这样:

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P')
DROP PROCEDURE my_procedure GO

希望有帮助!

于 2010-08-02T10:52:25.147 回答
0

如果要删除多个过程,可以执行以下操作。注意:此语法适用于 SQL Server 2016 及更高版本

USE [Database_name]
GO

BEGIN 
DROP PROCEDURE IF EXISTS    'my_procedure1',
                            'my_procedure2',
                            'my_procedure3',
                            'my_procedure4',
                            'my_procedure5',
END
    
于 2020-06-24T07:51:10.503 回答
-2

SQL SERVER 2008,如果你想删除一个存储过程,只需编写以下命令......

DROP PROC Procedure_name
DROP PROC dbo.spInsertUser

希望能帮助到你..

于 2016-03-26T04:01:54.137 回答