#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….
Надеюсь, это поможет вам…