Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста, как создать скалярную функцию, но предварительно убедиться, что ее еще нет в БД? Такая конструкция: IF OBJECT_ID('checkRTFisEmpty', 'SF') is null begin CREATE FUNCTION [dbo].[checkRTFisEmpty] ... end даёт ошибку: CREATE FUNCTION должна быть единственной в пакете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 12:31 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Eugenia79, ну обычно проверяю, дропают и создают. Ваш подход только через динамику ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 12:38 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
ну и FN = SQL scalar function, SF такого нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 12:40 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKну обычно проверяю, дропают и создают. Ваш подход только через динамикуДа, так получилось! FN исправила. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 12:46 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 12:54 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
msLexEugenia79, Если у вас SQL Server 2016 sp1 и выше, используйте create or alter если надо как описано, то это совсем не то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:00 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKEugenia79, ну обычно проверяю, дропают и создают. Ваш подход только через динамикуНеправда, можно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Обратите внимание, что проверяемое условие инвертировано. В одном батче не получится, это да; если это требуется, то действительно только через динамику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:12 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelTaPaKEugenia79, ну обычно проверяю, дропают и создают. Ваш подход только через динамикуНеправда, можно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Обратите внимание, что проверяемое условие инвертировано. В одном батче не получится, это да; если это требуется, то действительно только через динамику. можно и через транзакцию, обсуждались все эти варианты массу раз. Но всё это извращение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:18 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelTaPaKEugenia79, ну обычно проверяю, дропают и создают. Ваш подход только через динамикуНеправда, можно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Обратите внимание, что проверяемое условие инвертировано. В одном батче не получится, это да; если это требуется, то действительно только через динамику. с практической точки зрения такой способ сомнителен. ибо любое изменение кода функции после ее создания не приведет к изменению функции при его перепроливке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:18 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Посетительс практической точки зрения такой способ сомнителен. ибо любое изменение кода функции после ее создания не приведет к изменению функции при его перепроливке. Я скажу больше, после выполнение этого кода, функция [dbo].[checkRTFisEmpty] будет возвращать "не-пойми-что". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:21 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Классика же. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. И права не слетают, как при drop/create. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:30 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
То бишь во втором батче alter, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:31 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaK, Извращение - это создавать объекты в динамике, особенно когда вручную множественный искейпинг писать приходится. Все остальное более или менее компромиссы. Посетитель, Вопрос вкуса. "ибо любое изменение кода функции после ее создания не приведет к изменению функции при его перепроливке." - а если этого и не требуется? Разбивать лоб, пытаясь объяснить клиенту, что он ничего не понимает и что пересоздание ему на самом деле нужно? Вперед. msLex, "Я скажу больше, после выполнение этого кода, функция [dbo].[checkRTFisEmpty] будет возвращать "не-пойми-что"." - да что вы говорите. А я-то, наивный, думал, что будет возвращать то, на что рассчитывал автор такого скрипта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:31 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Ennor Tiegael, смхема здоровых людей IF OBJECT_ID() IS NOT NULL DROP GO CREATE GO авторИ права не слетают, как при drop/create. права не любители извращатся, раздают на роли и гранты пишут в скрипте создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:34 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKсмхема здоровых людей IF OBJECT_ID() IS NOT NULL DROP Обычно здоровые, без склероза, люди точно помнят есть у них в базу определённая функция или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:42 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKEnnor Tiegael, смхема здоровых людей IF OBJECT_ID() IS NOT NULL DROP GO CREATE GO авторИ права не слетают, как при drop/create. права не любители извращатся, раздают на роли и гранты пишут в скрипте создания. И в каждый скрипт alter "права не любители извращатся" вписывают заново все права, ога, ну точно "смхема здоровых людей". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 13:42 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovTaPaKсмхема здоровых людей IF OBJECT_ID() IS NOT NULL DROP Обычно здоровые, без склероза, люди точно помнят есть у них в базу определённая функция или нет. ну это до того момента пока не начинаешь продавать ПО и у всех разная степень версий авторИ в каждый скрипт alter "права не любители извращатся" вписывают заново все права, ога, ну точно "смхема здоровых людей". о чём ты страдалец? скриптов ALTER 0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:29 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelПосетитель, Вопрос вкуса. "ибо любое изменение кода функции после ее создания не приведет к изменению функции при его перепроливке." - а если этого и не требуется? Разбивать лоб, пытаясь объяснить клиенту, что он ничего не понимает и что пересоздание ему на самом деле нужно? Вперед. в том и дело, что "если". То есть, способ имеет крайне узкую нишу, когда код создается один раз и никогда не обновляется. drop-create или wadegwadegКлассика же. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. И права не слетают, как при drop/create. обеспечивают бОльшую гибкость, в том числе, покрывая Ваше "если" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 14:50 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKавторИ в каждый скрипт alter "права не любители извращатся" вписывают заново все права, ога, ну точно "смхема здоровых людей". о чём ты страдалец? скриптов ALTER 0? Ок, объясняю, раз непонятно. Если функция дропнута и пересоздана, права на нее слетают. Такие вот дела. Что делать будем? При каждом пересоздании заново расписывать все права? Вариант с alter подобной нелепостью не страдает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:01 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadegTaPaKпропущено... о чём ты страдалец? скриптов ALTER 0? Ок, объясняю, раз непонятно. Если функция дропнута и пересоздана, права на нее слетают. Такие вот дела. Что делать будем? При каждом пересоздании заново расписывать все права? Вариант с alter подобной нелепостью не страдает. повторяю авторраздают на роли и гранты пишут в скрипте создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:02 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKповторяю авторраздают на роли и гранты пишут в скрипте создания. В свою очередь, повторять не вижу смысла для write-only тапка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:11 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadegTaPaKповторяю пропущено... В свою очередь, повторять не вижу смысла для write-only тапка. грант в скрипте создания, скрипты в файлайх, файлы в репозитраии, заяц в утке Никто не пишет это "руками" каждый раз. Но вы в своей песочнице можете делать всё что хотите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:16 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKгрант в скрипте создания, скрипты в файлайх, файлы в репозитраии, заяц в утке Никто не пишет это "руками" каждый раз. Но вы в своей песочнице можете делать всё что хотите Потом функция меняется через drop/create, и все гранты из скрипта создания улетели куда? Правильно. Теперь их нужно заново устанавливать (что бывает затратно), так что приведенный пример скалярной функции - совершенно не выбор здорового человека. На самом деле подобные случаи бывают, например, при переделке IF на TF и наоборот, вот тогда без полного перенаката прав не обойтись. Кроме же подобных вынужденных случаев, схема с alter явно предпочтительна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:27 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadegTaPaKгрант в скрипте создания, скрипты в файлайх, файлы в репозитраии, заяц в утке Никто не пишет это "руками" каждый раз. Но вы в своей песочнице можете делать всё что хотите Потом функция меняется через drop/create, и все гранты из скрипта создания улетели куда? Правильно. Теперь их нужно заново устанавливать (что бывает затратно), так что приведенный пример скалярной функции - совершенно не выбор здорового человека. иисусья тряпка... файл.sql IF OBJECT_ID('dbo.prc') IS NOT NULL DROP PROCEDURE dbo.prc GO CREATE PROCEDURE dbo.prc AS SET NOCOUNT ON GO GRANT EXECUTE ON dbo.prc TO ROLE1 GO что куда летает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:32 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Опять write-only... TaPaKGRANT EXECUTE ON dbo.prc TO ROLE1 что куда летает Неужели до сих пор не нашлось сил прочесть/понять предыдущие посты в этой теме? Во-первых, даже этих грантов не нужно выписывать после alter'а, в отличие от. Во-вторых, если эти гранты такие примитивные, то упоминания песочницы становится понятным. В реальных же системах со сложной системой прав формирование и раздача прав на множество иерархических ролей бывает очень непростой и небыстрой процедурой. Вот всего этого и позволяет избежать alter вместо песочного drop/create. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:42 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadegОпять write-only... TaPaKGRANT EXECUTE ON dbo.prc TO ROLE1 что куда летает Неужели до сих пор не нашлось сил прочесть/понять предыдущие посты в этой теме? Во-первых, даже этих грантов не нужно выписывать после alter'а, в отличие от. Во-вторых, если эти гранты такие примитивные, то упоминания песочницы становится понятным. В реальных же системах со сложной системой прав формирование и раздача прав на множество иерархических ролей бывает очень непростой и небыстрой процедурой. Вот всего этого и позволяет избежать alter вместо песочного drop/create. я так понимаю, что а после create вы мышко гнездовым способом права настраиваите? или они чудом появляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 15:49 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKя так понимаю, что а после create вы мышко гнездовым способом права настраиваите? или они чудом появляются. И тут не понимаете. При первичном создании объекта скриптом один раз раздаются права (в простейших случаях явным выписыванием грантов, в сложных системах писанины по сопоставлению/запрету новому объекту прав всей иерархии, соответственно, куда больше). А при alter, который раз уже повторяю, всего этого уже повторно выполнять не требуется. Черт побери, по-моему, тут объяснять очевидные вещи по которому кругу бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 16:03 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadegTaPaKя так понимаю, что а после create вы мышко гнездовым способом права настраиваите? или они чудом появляются. И тут не понимаете. При первичном создании объекта скриптом один раз раздаются права (в простейших случаях явным выписыванием грантов, в сложных системах писанины по сопоставлению/запрету новому объекту прав всей иерархии, соответственно, куда больше). А при alter, который раз уже повторяю, всего этого уже повторно выполнять не требуется. Черт побери, по-моему, тут объяснять очевидные вещи по которому кругу бессмысленно. мышкопрограммисты... Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 16:11 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadeg, + 1 к альтеру а "объяснять очевидные вещи" бесполезно, т.к. каждый судит со своей колокольни однако некоторые допускают наличие "параллельных реальностей", где порядки устроены образом отличным от канонического/колокольного а некоторые дальше колокольни не видят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 16:11 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
TaPaKмышкопрограммисты... Удачи Читать учиться уже, видимо, поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2018, 16:16 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
господа Альтеристы пару вопросов к Вам 1. Как с ваших скриптов развернуть "чистую" БД ? Накатывать дроп.креате а патом пачку альтеров ? 2. У вас как подерживаеться версионость ? Если "чистая версия" относительно первого вопроса ? 3. Релизы состоят из одних альтеров ? 4. Как ведеться разработка ? Если в команде больше 1-го человека ? неужто сначала скриптуем процедуру с сервера а потом меняем ? :) ЗЫ. Понлстью подерживаю TaPaK :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 10:21 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Maxxгоспода Альтеристы пару вопросов к Вам 1. Как с ваших скриптов развернуть "чистую" БД ? Накатывать дроп.креате а патом пачку альтеров ? 2. У вас как подерживаеться версионость ? Если "чистая версия" относительно первого вопроса ? 3. Релизы состоят из одних альтеров ? 4. Как ведеться разработка ? Если в команде больше 1-го человека ? неужто сначала скриптуем процедуру с сервера а потом меняем ? :) ЗЫ. Понлстью подерживаю TaPaK :) вы поддерживать можете кого хотите. у нас свободная страна. Но если вы приведенный в топике скрипт альтера прочитать не смогли, то непонятно, как вам что то объяснить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 10:29 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Maxxгоспода Альтеристы пару вопросов к Вам 1. Как с ваших скриптов развернуть "чистую" БД ? Накатывать дроп.креате а патом пачку альтеров ? Накатить скрипты (create/alter). Пример скрипта см. выше, просмотрите тему. Maxx2. У вас как подерживаеться версионость ? Если "чистая версия" относительно первого вопроса ? Версионность поддерживается вообще другими инструментами. А чистая она или нет - со скриптами по вышеуказанному шаблону неважно. Maxx3. Релизы состоят из одних альтеров ? См. п.1. Maxx4. Как ведеться разработка ? Если в команде больше 1-го человека ? неужто сначала скриптуем процедуру с сервера а потом меняем ? :) Это не разработка, это поиграться в сервер детского садика. А у взрослых скрипты первичны. MaxxЗЫ. Понлстью подерживаю TaPaK :) Это очевидно из ваших вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 10:36 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Как хорошо, что мы уже лет пять как перевели разработку на SSDT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 11:26 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
wadegwadeg, угу ,аргументы не о чем :) кроме "взрослой" супер пупер системы раздачи прав на огбьекты... больше никакого профита Кроме того моментвы когда надо будет изменить права- альтер для етого дела все равно писать прийдеться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 12:29 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Maxxwadegwadeg, угу ,аргументы не о чем :) кроме "взрослой" супер пупер системы раздачи прав на огбьекты... больше никакого профита Кроме того моментвы когда надо будет изменить права- альтер для етого дела все равно писать прийдеться. такое ощущение, что вас заставляют пользоваться. Не хотите - не ешьте. Если бы вам хотелось понять - вы бы как минимум взглянули на скрипт прежде чем говорить про профит. ибо первый вопрос вы явно задали не подумав. А остальные(после понимания ответа на первый) должны были отпасть сами собой, ибо они вообще никак не отличаются для вариантов drop/create и предложенного варианта alter Потому что по сути это некая имитация create or alter, доступной только с 2016 версии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 12:39 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Давно использую альтер. Много преимуществ по сравн. с дроп/криейт: не слетают права, в случае ошибки в скрипте, старая версия объекта остается функционировать. зы: У меня была в работе система, у кот. многим ХП раздавались индивидуальные права на всех пользователей. Изначально в скрипте давался грант на "паблик", а потом в админпанели право паблик грохалось и каждый юзер грантился отдельно (для новых ХП). Для таких случаев альтер - отличное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 14:42 |
|
||
|
Как проверить наличие функции перед ее созданием?
|
|||
|---|---|---|---|
|
#18+
Maxx, Так, как у ТС, я на самом деле не делаю, все изменения генерю в SSDT, при необходимости подправляю. До этого был проект, там клиенты могли перепрыгнуть через несколько версий (локальная БД, ставили у себя, обновлялись тоже сами, как придется). В каждой новой версии добавлялся change script, который переводил БД из версии N-1 в N. Соответственно, если разница составляла 10 релизов, то при первом запуске после обновления прогонялись все скрипты между предыдущей версией БД и текущей. Нормально работало, хотя конечно не очень красиво было при сборке дистрибутива, каждый раз приходилось добавлять еще один файл в проект инсталлятора. Потом проект умер, по несвязанным причинам, так что в общем пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2018, 16:07 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1689077]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 257ms |
| total: | 474ms |

| 0 / 0 |
