Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SP и FN -- DROP/CREATE или CREATE/ALTER ?  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Простой и несущественный вопрос мучает меня: когда я делаю скрипт создания хранимки или функции, то как лучше обрабатывать ситуацию когда хранимка/функция уже существует?
Делать как это MS намекает:
IF EXISTS( SELECT ... sys.objects ... ) DROP ...
GO

CREATE ...
...или лучше повыделываться:
IF NOT EXISTS( SELECT ... sys.objects ... ) EXEC sys.sp_executesql N'CREATE ... <пустое тело функции/процедуры> '
GO

ALTER ...
?
Или неважно как писать?
28 ноя 11, 01:40    [11668514]     Ответить | Цитировать Сообщить модератору
 Re: SP и FN -- DROP/CREATE или CREATE/ALTER ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
в случае с альтером не теряются уже назначенные права
и в случае ошибки при создании - не теряется объект

зы сам пользуюсь drop - create
28 ноя 11, 01:51    [11668527]     Ответить | Цитировать Сообщить модератору
 Re: SP и FN -- DROP/CREATE или CREATE/ALTER ?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8878
Тока вот продактил:
if object_id('ExpDocs','P') is null
  begin
    exec (N'create procedure ExpDocs as begin select 1 end;');
    exec (N'GRANT EXECUTE ON [dbo].[ExpDocs] TO [public];
            GRANT VIEW DEFINITION ON [dbo].[ExpDocs] TO [public];
            GRANT CONTROL ON [dbo].[ExpDocs] TO [public];');
  end 
go
alter procedure ExpDocs (@DtTmS datetime = null, @DtTmE datetime = null, @Folio_BN nvarchar(200) = null,...) as
BEGIN
  SET DATEFORMAT ymd;
  set nocount on;
  ...

А вообще - как покатит... Если "сделал и забыл", то drop-create, если же предполагается хоть какая-то история модификации, то create-alter. В принципе - почти монопенисуально. ИМБО.
28 ноя 11, 03:11    [11668577]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить