SQL Server 2000中删除存储过程的语法是什么?

42

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

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

请提供完整的代码。

6个回答

64

微软建议使用 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)。这不仅可以避免副作用,而且还可以稍微提高一些效率。


我正在使用 MS SQL 2012,这个语法对我有效:DROP PROCEDURE [dbo].[YourProcedure] - Pawan Pareek

11

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

DROP PROCEDURE IF EXISTS [sp_ProcName]

1
这应该是最佳答案;OP 十年前就找到了解决方案,现在这才是正确的。大多数人阅读此内容不需要笨重的 SQL Server 2000 解决方案。 - MGOwen
这不是真的,问题明确要求2000版本,有很多问题回答了更新版本的内容。 - Lozenger

10

不需要访问系统表的稍微简单一些的方法:

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO

3

就像这样:

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

希望这能帮到您!

0
如果您想删除多个存储过程,可以按照以下步骤操作。 注意:此语法适用于 SQL Server 2016 及更高版本。
USE [Database_name]
GO

BEGIN 
DROP PROCEDURE IF EXISTS    'my_procedure1',
                            'my_procedure2',
                            'my_procedure3',
                            'my_procedure4',
                            'my_procedure5',
END
    

-2
在SQL SERVER 2008中,如果你想删除存储过程,只需编写以下命令...
DROP PROC Procedure_name
DROP PROC dbo.spInsertUser

希望它有所帮助..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接