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

Saa*_*ail 28 stored-procedures sql-server-2000 sql-drop

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

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

请提供完整的代码.

Bro*_*ams 45

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

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

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

仍然,始终指定对象所有者(默认为dbo).这不仅可以避免令人讨厌的副作用,而且还会更快一些.


Met*_*hor 7

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

DROP PROCEDURE IF EXISTS [sp_ProcName]
Run Code Online (Sandbox Code Playgroud)


Met*_*hor 6

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

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
Run Code Online (Sandbox Code Playgroud)