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.
Estoy usando MS SQL 2012, esta sintaxis funcionó para mí DROP PROCEDURE [dbo]. [YourProcedure] –