2010-08-02 15 views

Respuesta

33

Microsoft recomienda utilizar la función object_id(), así:

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() ayuda a resolver conflictos entre propietarios. Si lo hace
SELECT name FROM sysobjects WHERE name = 'my_procedure' , puede ver muchos procedimientos diferentes con el mismo nombre, todos para diferentes propietarios.

Pero, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]') solo le mostrará la que tiene el propietario/usuario actual, si existe más de un procedimiento con ese nombre.

Aún así, especifique siempre el propietario del objeto (el valor predeterminado es dbo). Esto no solo evita los desagradables efectos secundarios, también es un poco más rápido.

+0

Estoy usando MS SQL 2012, esta sintaxis funcionó para mí DROP PROCEDURE [dbo]. [YourProcedure] –

2

De esta manera:

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

Espero que ayude!

5

Un método ligeramente más simple sin tener que ir a las tablas del sistema:

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

En SQL SERVER 2008, si desea eliminar un procedimiento almacenado acaba de escribir el comando a continuación ....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

espero que ayuda ..

Cuestiones relacionadas