2010-08-02 3 views

risposta

33

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.

+0

Sto usando MS SQL 2012, questa sintassi ha funzionato per me PROCEDURA DROP [dbo]. [YourProcedure] –

2

Ti piace questa:

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

Speranza che aiuta!

5

un metodo leggermente più semplice senza andare a tabelle di sistema:

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

In SQL SERVER 2008, se si vuole far cadere una stored procedure basta scrivere il seguente comando ....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

spero che aiuta ..