在 SQL Server 2000 中删除存储过程的语法是啥?
Posted
技术标签:
【中文标题】在 SQL Server 2000 中删除存储过程的语法是啥?【英文标题】:What is the syntax to drop a Stored Procedure in SQL Server 2000?在 SQL Server 2000 中删除存储过程的语法是什么? 【发布时间】:2011-03-24 03:41:17 【问题描述】:简单的问题,正如标题所示:
在 SQL Server 2000 中删除存储过程 (SP) 的语法是什么,首先检查 SP 是否存在?
请提供完整代码。
【问题讨论】:
【参考方案1】: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
)。这不仅避免了令人讨厌的副作用,而且速度也更快。
【讨论】:
我使用的是 MS SQL 2012,这个语法对我有用 DROP PROCEDURE [dbo].[YourProcedure]【参考方案2】:一种略简单的方法,无需进入系统表:
IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
【讨论】:
【参考方案3】:不适用于 SQL Server 2000,但从 SQL Server 2016 开始,您可以使用 IF EXISTS 语法:
DROP PROCEDURE IF EXISTS [sp_ProcName]
【讨论】:
这应该是最佳答案; OP 十年前得到了他的解决方案,现在这是正确的解决方案。大多数阅读本文的人不需要笨重的 SQL Server 2000 解决方案。 这不是真的,这个问题专门要求2000年,有很多问题回答新版本。【参考方案4】:像这样:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P')
DROP PROCEDURE my_procedure GO
希望有帮助!
【讨论】:
【参考方案5】:如果要删除多个过程,可以执行以下操作。 注意:此语法适用于 SQL Server 2016 及更高版本
USE [Database_name]
GO
BEGIN
DROP PROCEDURE IF EXISTS 'my_procedure1',
'my_procedure2',
'my_procedure3',
'my_procedure4',
'my_procedure5',
END
【讨论】:
【参考方案6】:在SQL SERVER 2008
,如果你想删除一个存储过程,只需编写以下命令......
DROP PROC Procedure_name
DROP PROC dbo.spInsertUser
希望对你有帮助..
【讨论】:
以上是关于在 SQL Server 2000 中删除存储过程的语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL Server 2000 调用 MySQL 存储过程?
用SQL创建存储过程的题目(SQL SERVER2000下)