Мне нужно написать сценарий развертывания, который будет работать, если хранимая процедура существует или не существует. т.е. если он существует, то мне нужно его изменить, иначе создать.
Как я могу это сделать в sql.
Я использую SQL Server 2005
sql
sql-server-2005
stored-procedures
GordyII
источник
источник
Ответы:
Если вы УДАЛИТЕ и СОЗДАЕТЕ процедуру, вы потеряете настройки безопасности. Это может раздражать администратора базы данных или вообще нарушить работу вашего приложения.
Что я делаю, так это создаю тривиальную хранимую процедуру, если она еще не существует. После этого вы можете ИЗМЕНИТЬ хранимую процедуру по своему усмотрению.
Таким образом, настройки безопасности, комментарии и другие метаданные сохранятся после развертывания.
источник
if object_id('YourSp') is null BEGIN ... END
для добавления соответствующих разрешений после создания хранимой процедуры.Самый чистый способ - проверить его существование, отбросить, если он существует, а затем воссоздать его. Вы не можете встроить оператор create proc в оператор IF. Это должно хорошо работать:
источник
Если вы имеете дело только с хранимыми процедурами, проще всего, вероятно, отказаться от процедуры, а затем воссоздать ее. Вы можете сгенерировать весь код для этого с помощью мастера создания сценариев в SQL Server.
источник
Из
SQL Server 2016 CTP3
вы можете использовать новые операторы DIE вместо большихIF
обертокСинтаксис:
Запрос:
Больше информации здесь
источник
где
xxx
имя процедурыисточник
В дополнение к тому, что уже было сказано, я также хотел бы добавить другой подход и отстаивать использование стратегии дифференциального развертывания сценариев. Вместо создания сценария с отслеживанием состояния, который всегда проверяет текущее состояние и действует на его основе, разверните его с помощью серии сценариев без отслеживания состояния, которые обновляются с хорошо известных версий . Я использовал эту стратегию, и она окупается, так как мои сценарии развертывания теперь полностью бесплатны.
источник
Вы можете написать запрос следующим образом:
Чтобы быть более конкретным в приведенном выше синтаксисе:
OBJECT_ID - это уникальный номер идентификатора для объекта в базе данных, он используется внутри SQL Server. Поскольку мы передаем имя процедуры, за которым следует тип объекта P, который сообщает SQL-серверу, что вы должны найти объект с именем имя процедуры, который имеет тип процедуры, т. Е. P
Этот запрос найдет процедуру и, если она доступна, отбросит ее и создаст новую.
Для получения подробной информации о OBJECT_ID и типах объектов посетите: SYS.Objects
источник
источник
У меня есть хранимая процедура, которая позволяет клиенту продлить проверку, если она существует, я не хочу ее менять, если она не хочет, я ее создаю, лучший способ, который я нашел:
источник
Приведенный ниже код проверит, существует ли хранимая процедура уже или нет.
Если он существует, он изменится, если он не существует, он создаст для вас новую хранимую процедуру:
источник
Лучшим вариантом может быть использование такого инструмента, как Red-Gate SQL Compare или SQL Examiner, для автоматического сравнения различий и создания сценария миграции.
источник