ALTER vs DROP & CREATE в SQL Server - PullRequest
5 голосов
/ 27 июня 2011

После создания хранимой процедуры в SQL Server, почему заменить Create на Alter?Что произойдет при исполнении, если мы не изменим его?Есть ли лучшая альтернатива этому, чем проверка существования и отбрасывания?

Ответы [ 4 ]

7 голосов
/ 27 июня 2011

Create потерпит неудачу, если таблица существует. Alter потерпит неудачу, если таблица не существует.

Если вы спросите, зачем использовать Alter, если вы можете удалить и создать, несколько причин:

  • определенные разрешения, уже назначенные объекту, вам потребуется повторно предоставить разрешения, если вы уроните его
  • объект, вероятно, используется другими объектами с привязкой схемы
1 голос
/ 22 июня 2015

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

IF (select object_ID('schema.Procedure')) is null
    exec('Create procedure schema.Procedure as select 1')
GO

Alter procedure dpm.TableCellLoad

Таким образом, привилегии, предоставленные процедуре, всегда будут сохраняться, и если процедура не существуетоно создано.

1 голос
/ 27 июня 2011

В SQL Server нет синтаксиса "СОЗДАТЬ ИЛИ ЗАМЕНИТЬ" (как в других СУБД)

Я склонен использовать этот шаблон, если я не уверен, что что-то существует.

IF OBJECT_ID('dbo.MyProc') IS NOT NULL
   DROP PROC dbo.MyProc
GO
CREATE PROC dbo.MyProc
...
GO
GRANT EXECUTE ---
GO
1 голос
/ 27 июня 2011

Исходя из моих знаний,

  • Всякий раз, когда вы предоставляете сборку базы данных, рекомендуется проверять, существует ли хранимая процедура для удаления, и затем заново создавать процедуру.

  • При отладке процедуры может произойти переход от создания к изменению, но это не является стандартной практикой при сборке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...