Реальная причина добавления DROP в CREATE Stored procedure

#stored-procedures

#хранимые процедуры

Вопрос:

Я просто хотел узнать, какова наилучшая практика для создания и выполнения хранимой процедуры.

Я видел, как показано ниже:-

 IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'Foo')
  DROP PROCEDURE Foo
  GO

CREATE PROCEDURE dbo.Foo
  

Но я думаю, что когда мы выполним эту хранимую процедуру, она удалит хранимую процедуру и создаст новую. Но если в синтаксисе create stored procedure ошибка, это не приведет к воссозданию хранимой процедуры, верно? Таким образом, в результате наша существующая хранимая процедура удаляется, а новая хранимая процедура не создается. Итак, какова реальная причина добавления DROP сюда?

Ответ №1:

Причина в том, что ваши скрипты могут выполняться идемпотентным способом — их можно запускать столько раз, сколько необходимо, с тем же результатом. А именно, ваша база данных будет иметь хранимую процедуру, которую вы хотите. Ваша процедура будет создана и удалена заранее, если это необходимо. Если бы вы этого не сделали, то вам понадобились бы отдельные скрипты drop и create.

Если вы обеспокоены тем, что в ваших скриптах есть ошибки, исправьте их. Запустите свои скрипты несколько раз и устраните любые возникающие проблемы. Усилия стоят того, чтобы не поддерживать отдельные наборы сценариев.

Ответ №2:

ПОСКОЛЬКУ она выполняется построчно, поэтому, когда она создает процедуру, а затем появляется ошибка, и вы снова воссоздаете эту процедуру, тогда она выдает ошибку, потому что она уже сгенерирована в вашей базе данных с кодом ошибки….

итак, для этого нужно воссоздать эту процедуру снова…..

вы можете использовать alter вместо create….

Надеюсь, это поможет вам…