DROP ... СОЗДАТЬ против ALTER - PullRequest
       60

DROP ... СОЗДАТЬ против ALTER

52 голосов
/ 29 октября 2009

Когда дело доходит до создания хранимых процедур, представлений, функций и т. Д., Лучше ли выполнять DROP ... CREATE или ALTER для объекта?

Я видел множество «стандартных» документов, в которых говорится, что нужно делать DROP ... CREATE, но я видел множество комментариев и аргументов в пользу метода ALTER.

Метод ALTER сохраняет безопасность, хотя я слышал, что метод DROP ... CREATE вызывает перекомпиляцию всего SP при первом запуске вместо просто перекомпиляции на уровне операторов.

Может кто-нибудь сказать мне, есть ли другие преимущества / недостатки использования одного над другим?

Ответы [ 12 ]

0 голосов
/ 29 октября 2009

С точки зрения удобства использования создание и создание лучше, чем изменение. Alter завершится ошибкой в ​​базе данных, которая не содержит этот объект, но с IF EXISTS DROP и затем CREATE будет работать в базе данных с уже существующим объектом или в базе данных, где объект не существует. В Oracle и PostgreSQL вы обычно создаете функции и процедуры с помощью оператора CREATE OR REPLACE, который выполняет те же функции, что и SQL SERVER IF EXISTS DROP, а затем CREATE. Было бы неплохо, если бы SQL Server использовал этот небольшой, но очень удобный синтаксис.

Вот как бы я это сделал. Поместите все это в один скрипт для данного объекта.

IF EXISTS ( SELECT 1
            FROM information_schema.routines
            WHERE routine_schema = 'dbo'
              AND routine_name   = '<PROCNAME'
              AND routine_type   = 'PROCEDURE' )
BEGIN
    DROP PROCEDURE <PROCNAME>
END
GO


CREATE PROCEDURE <PROCNAME>
AS
BEGIN
END
GO

GRANT EXECUTE ON <PROCNAME> TO <ROLE>
GO
0 голосов
/ 29 октября 2009

Вы задали вопрос, конкретно относящийся к объектам БД, которые не содержат каких-либо данных и теоретически не должны изменяться так часто.

Скорее всего, вам может понадобиться редактировать эти объекты, но не каждые 5 минут. Из-за этого я думаю, что вы уже ударили молотом по голове - разрешения.

Короткий ответ, на самом деле не проблема, если разрешения не являются проблемой

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