Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
L_argo Member Откуда: Сообщений: 1406 |
Пересоздавал объекты скриптом вот так: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] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3984 |
и почему так имхуется? Иногда дроп+креате лучше. |
||
30 авг 19, 14:58 [21960621] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
а почему вам надо менять тип функции со скалярного в табличный при помощи alter? они хоть и называются все "функции", но это три отдельных типа объектов: скалярные, табличные инлайн, табличные многострочные |
||
30 авг 19, 15:05 [21960627] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
потому что в 2008 O_o нет CREATE OR ALTER |
||||
30 авг 19, 15:07 [21960629] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
вопрос не про create, а почему автор через alter хочет кардинально сменить тип объекта. ну то есть alter скалярки в табличную это примерно то же самое, что alter скалярки в процедуру; тут же никто не будет удивляться, что не работает |
||||
30 авг 19, 15:14 [21960636] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
вы нипанимаете(с) он хочет всё время делать алтер, но если объекта нет, то он рисует его, и вот рисовать его тоже надо правильным. |
||||
30 авг 19, 15:15 [21960639] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8730 |
при drop + create теряются все права на объект |
||||
30 авг 19, 15:17 [21960640] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
это у тех кто не способен в роли и гранты прописывать на этапе разработке, а у тех кто мышкой дба наклацывают гранты возникают такие танцы |
||||
30 авг 19, 15:19 [21960645] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||
30 авг 19, 15:23 [21960649] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а он сейчас что по вашему делает :) |
||||
30 авг 19, 15:24 [21960650] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
L_argo, при работе с проектом базы в Visual Studio проблем в принципе не возникает, т.к. студия полностью автоматизирует дропы-криэйты. |
30 авг 19, 15:39 [21960664] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3984 |
так и подумал, так это решается при разумном подходе... |
||||
30 авг 19, 16:45 [21960712] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Вообще тема кажется надуманной, т.к. использование скалярных и табличных функций синтаксически разное. Т.е. одним "переименованием" не обойдёшься. |
30 авг 19, 17:04 [21960726] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||
30 авг 19, 18:27 [21960784] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Главная проблема в том, что при при drop + create в течении некоторого времени объекта не существует, и попытки его использования приведут к ошибкам. Что исключает применение некоторых удобных сценариев процесса разработки ИМХО нужно всегда делать ALTER, т.е. писать скрипты так, как в первом посте ТС. А проблема "нельзя альтером поменять тип ф-ции со скалярного в табличный" имеет тот же практический смысл, как и "нельзя альтером поменять процедуру на таблицу", скалярная и табличная функции семантически отличаются примерно так же. Если же вдруг (!) нужно поменять тип ф-ции со скалярного в табличный, то действуем так же, как при необходимости заменить процедуру на таблицу (ну, или на линкед-сервер, или на каталог полнотекстового поиска), то есть удаляем один объект, и создаём другой |
||||
1 сен 19, 22:02 [21961563] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
alexeyvg,
интересно, мы меняем объект или группу связаных расчётами объектов и при этом мы никак не можем сказать на чём же отработали в момент нашего алтера |
||
2 сен 19, 08:47 [21961625] Ответить | Цитировать Сообщить модератору |
L_argo Member Откуда: Сообщений: 1406 |
Т.е. оставить только скрипты и механизм их обработки и создания. Н-р генерация начальной пустой БД начинается с автоматического наката набора скриптов. Следующий шаг - заливка начальных данных из CSV. |
||||
2 сен 19, 08:59 [21961629] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Я не говорю, что это единственно правильный вариант, но он вполне возможен, собственно, само наличие конструкции ALTER именно это и предполагает. И вообще, по моему, любой механизм обновления без остановки сервиса предполагает именно это - "мы никак не можем сказать на чём же отработали в момент нашего <тут подставить некое действие во время обновления>", без дополнительного логирования. |
||||
2 сен 19, 11:04 [21961698] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
L_argo, "На коленке" тянуть корпоративный многосерверный многобазовый проект без студии не то, чтобы сложно, а очень сложно. Если проект односерверный однобазовый, то проблем становится меньше и еще как-то худо-бедно с доморощенным тестированием или вовсе без него можно. Но все равно остается проблема девопса, довольно раздражающая. Следует заметить, что комьюнити студию в лицензии разрешается использовать при разработке коммерческой БД, если она используется только для разработки БД совместно с DataTools. Так что проблем в использовании студии вообще нет. |
2 сен 19, 12:11 [21961757] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |