2010-08-02 10 views

Répondre

33

Microsoft a recommandé d'utiliser la fonction object_id(), comme ceci:

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() aide à résoudre les conflits de propriétaire. Si vous faites
SELECT name FROM sysobjects WHERE name = 'my_procedure' , vous pouvez voir beaucoup de procédures différentes avec le même nom - tout pour différents propriétaires.

Mais, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]') ne vous montrera que celui pour le propriétaire/utilisateur actuel, s'il existe plus d'une procédure de ce nom. Cependant, toujours spécifier le propriétaire de l'objet (dbo par défaut). Non seulement cela évite les effets secondaires désagréables, mais c'est aussi un peu plus rapide.

+0

J'utilise MS SQL 2012, cette syntaxe a fonctionné pour moi DROP PROCEDURE [dbo]. [YourProcedure] –

2

Comme ceci:

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

Hope that helps!

5

Une méthode un peu plus simple, sans passer aux tables système:

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

En SQL SERVER 2008, si vous souhaitez déposer une procédure stockée il suffit d'écrire la commande ci-dessous ....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

espère que ce aide ..