Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Alter function  [new]
L_argo
Member

Откуда:
Сообщений: 1133
Пересоздавал объекты скриптом вот так:
if object_id('xxxxx') is null
exec('create function xxxx returns integer as begin return 0 end')
GO

ALTER FUNCTION [dbo].[xxxxx]
.....
Но обнаружил, что для табличных ф-ций альтер фейлится, т.е. нельзя альтером поменять тип ф-ции со скалярного в табличный.
Пришлось допилить формирование скрипта, чтобы прописывал вначале:

create function ххххх returns table as return(select id=0)

Мож кому пригодится.

Почему именно такой способ создания/обновления объектов ?
Он самый оптимальный, ИМХО. Лучше, чем Дроп + криейт.

зы: мсскл2008.
30 авг 19, 14:29    [21960589]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3444
автор
Почему именно такой способ создания/обновления объектов ?
Он самый оптимальный, ИМХО. Лучше, чем Дроп + криейт.


и почему так имхуется?
Иногда дроп+креате лучше.
30 авг 19, 14:58    [21960621]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
L_argo
Но обнаружил, что для табличных ф-ций альтер фейлится, т.е. нельзя альтером поменять тип ф-ции со скалярного в табличный.

а почему вам надо менять тип функции со скалярного в табличный при помощи alter?
они хоть и называются все "функции", но это три отдельных типа объектов: скалярные, табличные инлайн, табличные многострочные
30 авг 19, 15:05    [21960627]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Shakill
L_argo
Но обнаружил, что для табличных ф-ций альтер фейлится, т.е. нельзя альтером поменять тип ф-ции со скалярного в табличный.

а почему вам надо менять тип функции со скалярного в табличный при помощи alter?
они хоть и называются все "функции", но это три отдельных типа объектов: скалярные, табличные инлайн, табличные многострочные

потому что в 2008 O_o нет CREATE OR ALTER
30 авг 19, 15:07    [21960629]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
TaPaK
Shakill
пропущено...

а почему вам надо менять тип функции со скалярного в табличный при помощи alter?
они хоть и называются все "функции", но это три отдельных типа объектов: скалярные, табличные инлайн, табличные многострочные

потому что в 2008 O_o нет CREATE OR ALTER

вопрос не про create, а почему автор через alter хочет кардинально сменить тип объекта. ну то есть alter скалярки в табличную это примерно то же самое, что alter скалярки в процедуру; тут же никто не будет удивляться, что не работает
30 авг 19, 15:14    [21960636]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Shakill
TaPaK
пропущено...

потому что в 2008 O_o нет CREATE OR ALTER

вопрос не про create, а почему автор через alter хочет кардинально сменить тип объекта. ну то есть alter скалярки в табличную это примерно то же самое, что alter скалярки в процедуру; тут же никто не будет удивляться, что не работает

вы нипанимаете(с)
он хочет всё время делать алтер, но если объекта нет, то он рисует его, и вот рисовать его тоже надо правильным.
30 авг 19, 15:15    [21960639]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
msLex
Member

Откуда:
Сообщений: 7727
Ролг Хупин
автор
Почему именно такой способ создания/обновления объектов ?
Он самый оптимальный, ИМХО. Лучше, чем Дроп + криейт.


и почему так имхуется?
Иногда дроп+креате лучше.


при drop + create теряются все права на объект
30 авг 19, 15:17    [21960640]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
msLex
Ролг Хупин
пропущено...


и почему так имхуется?
Иногда дроп+креате лучше.


при drop + create теряются все права на объект

это у тех кто не способен в роли и гранты прописывать на этапе разработке, а у тех кто мышкой дба наклацывают гранты возникают такие танцы
30 авг 19, 15:19    [21960645]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
invm
Member

Откуда: Москва
Сообщений: 9116
TaPaK
CREATE OR ALTER
Тоже ТСа не спасет.
30 авг 19, 15:23    [21960649]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
invm
TaPaK
CREATE OR ALTER
Тоже ТСа не спасет.

а он сейчас что по вашему делает :)
30 авг 19, 15:24    [21960650]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7392
L_argo,

при работе с проектом базы в Visual Studio проблем в принципе не возникает, т.к. студия полностью автоматизирует дропы-криэйты.
30 авг 19, 15:39    [21960664]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3444
msLex
Ролг Хупин
пропущено...


и почему так имхуется?
Иногда дроп+креате лучше.


при drop + create теряются все права на объект


так и подумал, так это решается при разумном подходе...
30 авг 19, 16:45    [21960712]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7392
Вообще тема кажется надуманной, т.к. использование скалярных и табличных функций синтаксически разное. Т.е. одним "переименованием" не обойдёшься.
30 авг 19, 17:04    [21960726]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
Владислав Колосов
Вообще тема кажется надуманной, т.к. использование скалярных и табличных функций синтаксически разное. Т.е. одним "переименованием" не обойдёшься.
Лень, матушка...
30 авг 19, 18:27    [21960784]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30747
TaPaK
msLex
при drop + create теряются все права на объект

это у тех кто не способен в роли и гранты прописывать на этапе разработке, а у тех кто мышкой дба наклацывают гранты возникают такие танцы
Да, права не проблема.
Главная проблема в том, что при при drop + create в течении некоторого времени объекта не существует, и попытки его использования приведут к ошибкам. Что исключает применение некоторых удобных сценариев процесса разработки

ИМХО нужно всегда делать ALTER, т.е. писать скрипты так, как в первом посте ТС.

А проблема "нельзя альтером поменять тип ф-ции со скалярного в табличный" имеет тот же практический смысл, как и "нельзя альтером поменять процедуру на таблицу", скалярная и табличная функции семантически отличаются примерно так же.

Если же вдруг (!) нужно поменять тип ф-ции со скалярного в табличный, то действуем так же, как при необходимости заменить процедуру на таблицу (ну, или на линкед-сервер, или на каталог полнотекстового поиска), то есть удаляем один объект, и создаём другой
1 сен 19, 22:02    [21961563]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
alexeyvg,
автор
Главная проблема в том, что при при drop + create в течении некоторого времени объекта не существует, и попытки его использования приведут к ошибкам. Что исключает применение некоторых удобных сценариев процесса разработки

интересно, мы меняем объект или группу связаных расчётами объектов и при этом мы никак не можем сказать на чём же отработали в момент нашего алтера
2 сен 19, 08:47    [21961625]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
L_argo
Member

Откуда:
Сообщений: 1133
alexeyvg
ИМХО нужно всегда делать ALTER, т.е. писать скрипты так, как в первом посте ТС.
+1

при работе с проектом базы в Visual Studio проблем в принципе не возникает,
Возникает другая проблема - необходимость использования Студии. А цель была - минимизировать до нуля использование сторонних средств.
Т.е. оставить только скрипты и механизм их обработки и создания.

Н-р генерация начальной пустой БД начинается с автоматического наката набора скриптов.
Следующий шаг - заливка начальных данных из CSV.
2 сен 19, 08:59    [21961629]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30747
TaPaK
alexeyvg,
автор
Главная проблема в том, что при при drop + create в течении некоторого времени объекта не существует, и попытки его использования приведут к ошибкам. Что исключает применение некоторых удобных сценариев процесса разработки

интересно, мы меняем объект или группу связаных расчётами объектов и при этом мы никак не можем сказать на чём же отработали в момент нашего алтера
Да, в целом так и есть.

Я не говорю, что это единственно правильный вариант, но он вполне возможен, собственно, само наличие конструкции ALTER именно это и предполагает.

И вообще, по моему, любой механизм обновления без остановки сервиса предполагает именно это - "мы никак не можем сказать на чём же отработали в момент нашего <тут подставить некое действие во время обновления>", без дополнительного логирования.
2 сен 19, 11:04    [21961698]     Ответить | Цитировать Сообщить модератору
 Re: Alter function  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7392
L_argo,

"На коленке" тянуть корпоративный многосерверный многобазовый проект без студии не то, чтобы сложно, а очень сложно. Если проект односерверный однобазовый, то проблем становится меньше и еще как-то худо-бедно с доморощенным тестированием или вовсе без него можно. Но все равно остается проблема девопса, довольно раздражающая.

Следует заметить, что комьюнити студию в лицензии разрешается использовать при разработке коммерческой БД, если она используется только для разработки БД совместно с DataTools. Так что проблем в использовании студии вообще нет.
2 сен 19, 12:11    [21961757]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить