Microsoft рекомендует использовать функцию object_id()
, например:
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()
помогает разрешать конфликты владельцев.Если вы выполните
SELECT name FROM sysobjects WHERE name = 'my_procedure'
, вы можете увидеть много разных процедур с одним и тем же именем - все для разных владельцев.
Но, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]')
покажет вам только одну для текущего владельца / пользователя, если существует более одной процедуры с таким именем.
Тем не менее, всегда указывайте владельца объекта (по умолчанию dbo
).Это не только позволяет избежать неприятных побочных эффектов, но и немного быстрее.