简单的问题,正如标题所示:
通过首先检查 SP 是否存在,在 SQL Server 2000 中删除存储过程 (SP) 的语法是什么?
请提供完整代码。
简单的问题,正如标题所示:
通过首先检查 SP 是否存在,在 SQL Server 2000 中删除存储过程 (SP) 的语法是什么?
请提供完整代码。
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
)。这不仅避免了令人讨厌的副作用,而且速度也更快。
无需进入系统表的稍微简单的方法:
IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
不适用于 SQL Server 2000,但从 SQL Server 2016 开始,您可以使用 IF EXISTS 语法:
DROP PROCEDURE IF EXISTS [sp_ProcName]
像这样:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P')
DROP PROCEDURE my_procedure GO
希望有帮助!
如果要删除多个过程,可以执行以下操作。注意:此语法适用于 SQL Server 2016 及更高版本
USE [Database_name]
GO
BEGIN
DROP PROCEDURE IF EXISTS 'my_procedure1',
'my_procedure2',
'my_procedure3',
'my_procedure4',
'my_procedure5',
END
在SQL SERVER 2008
,如果你想删除一个存储过程,只需编写以下命令......
DROP PROC Procedure_name
DROP PROC dbo.spInsertUser
希望能帮助到你..