2010-08-02 65 views

回答

33

微软推荐使用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)。这不仅可以避免令人讨厌的副作用,而且还可以快一点。

+0

我正在使用MS SQL 2012,此语法对我有用 DROP PROCEDURE [dbo]。[YourProcedure] – 2017-12-30 11:21:46

2

像这样:

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

希望帮助!

5

而不去系统表稍微简单的方法:

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

SQL SERVER 2008,如果你想删除一个存储过程只写下面的命令....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

希望它帮助..

相关问题