Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39704889&tid=1689077]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 385ms |

| 0 / 0 |
