简单的问题,如标题所示:
在首先检查存储过程(SP)是否存在的情况下,SQL Server 2000中删除存储过程(SP)的语法是什么?
请提供完整的代码。
简单的问题,如标题所示:
在首先检查存储过程(SP)是否存在的情况下,SQL Server 2000中删除存储过程(SP)的语法是什么?
请提供完整的代码。
微软建议使用 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
)。这不仅可以避免副作用,而且还可以稍微提高一些效率。
虽然不适用于SQL Server 2000,但从SQL Server 2016开始,您可以使用IF EXISTS语法:
DROP PROCEDURE IF EXISTS [sp_ProcName]
不需要访问系统表的稍微简单一些的方法:
IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
就像这样:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P')
DROP PROCEDURE my_procedure GO
USE [Database_name]
GO
BEGIN
DROP PROCEDURE IF EXISTS 'my_procedure1',
'my_procedure2',
'my_procedure3',
'my_procedure4',
'my_procedure5',
END
DROP PROC Procedure_name
DROP PROC dbo.spInsertUser
希望它有所帮助..
DROP PROCEDURE [dbo].[YourProcedure]
- Pawan Pareek