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

发布于 2024-09-12 14:44:37 字数 98 浏览 9 评论 0原文

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

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

请提供完整代码。

Simple question, as the title suggests:

What is the syntax to drop a Stored Procedure (SP) in SQL Server 2000, by first checking that the SP exists?

Please provide the full code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

疏忽 2024-09-19 14:44:37

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() 有助于解决所有者冲突。如果你这样做
从 sysobjects 中选择名称,其中 name = 'my_procedure'
,您可能会看到许多具有相同名称的不同过程 - 全部针对不同的所有者。

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

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

Microsoft recommended using the object_id() function, like so:

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() helps resolve owner conflicts. If you do
SELECT name FROM sysobjects WHERE name = 'my_procedure'
, you may see many different procedures with the same name -- all for different owners.

But, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]') will only show you the one for the current owner/user, if more than one procedure by that name exists.

Still, always specify the object owner (default is dbo). Not only does this avoid nasty side-effects, it's a little faster too.

沉睡月亮 2024-09-19 14:44:37

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

DROP PROCEDURE IF EXISTS [sp_ProcName]

Not for SQL Server 2000, but starting with SQL Server 2016, you can use the IF EXISTS syntax:

DROP PROCEDURE IF EXISTS [sp_ProcName]
川水往事 2024-09-19 14:44:37

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

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

A slightly simpler method without going to system tables:

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
因为看清所以看轻 2024-09-19 14:44:37

像这样:

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

希望有帮助!

Like this:

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

Hope that helps!

橘寄 2024-09-19 14:44:37

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

USE [Database_name]
GO

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

You can do the following if you want to remove multiple Procedures.
NB: This syntax works on SQL Server 2016 and later

USE [Database_name]
GO

BEGIN 
DROP PROCEDURE IF EXISTS    'my_procedure1',
                            'my_procedure2',
                            'my_procedure3',
                            'my_procedure4',
                            'my_procedure5',
END
    
少女情怀诗 2024-09-19 14:44:37

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

DROP PROC Procedure_name
DROP PROC dbo.spInsertUser

希望它有帮助......

In SQL SERVER 2008, if you want to drop a stored procedure just write the below command....

DROP PROC Procedure_name
DROP PROC dbo.spInsertUser

Hope it helps..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文