Microsoft consiglia di utilizzare la funzione object_id()
, in questo modo:
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()
aiuta a risolvere i conflitti del proprietario. Se lo fai,
SELECT name FROM sysobjects WHERE name = 'my_procedure'
, potresti vedere diverse procedure con lo stesso nome, tutte per proprietari diversi.
Ma, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]')
mostrerà solo quello per il proprietario/utente corrente, se esiste più di una procedura con quel nome.
Ancora, specificare sempre il proprietario dell'oggetto (il valore predefinito è dbo
). Non solo evita effetti collaterali sgradevoli, è anche un po 'più veloce.
fonte
2010-08-03 00:10:06
Sto usando MS SQL 2012, questa sintassi ha funzionato per me PROCEDURA DROP [dbo]. [YourProcedure] –