Простой вопрос, как заголовок предполагает:
Что синтаксис должен отбросить Хранимую процедуру (SP) в SQL Server 2000 первой проверкой, что SP существует?
Предоставьте полный код.
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
). Это не только позволяет избежать неприятных побочных эффектов, но и немного ускоряет работу.
Вот так:
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P')
DROP PROCEDURE my_procedure GO
Надеюсь, это поможет!