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.
J'utilise MS SQL 2012, cette syntaxe a fonctionné pour moi DROP PROCEDURE [dbo]. [YourProcedure] –