|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Коллеги, добрый день! В хранимой процедуре необходимо понимать, какие параметры не были переданы, а каким параметрам передано значение NULL (т.е. определить смысл значения NULL). Это необходимо для реализации логики обновления полей (если не передано значение - не трогаем, передано - обновляем). У кого-нибудь есть пример шаблона хранимой процедуры для решения данной задачи? Вижу 2 варианта. 1) Ввести входной параметр маски реально переданных параметров (т.е. вызывающая сторона уточняет перечень передаваемых параметров); 2) Определить специальные значения входных параметров, которые будут указывать, что передано пустое значение (т.е. default значение null означает отсутствие передачи параметра, а пустая строка, например для varchar, означает необходимость сбросить значение поля в БД в NULL). Спасибо) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:38 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano, Вариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 13:54 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:23 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Guf, авторВариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано. Есть сущности, содержащие более 100 столбцов. Объявлять овер 100 переменных и начитывать их перед EXEC - ну такое себе. И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:43 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
felix_ff Tketano, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
? Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 14:45 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano, делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 16:36 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
А есть еще вариант реализации, поражающий своим безграничным ужасом - формировать update нужного поля (или полей) на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 16:42 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano, это кручу-верчу бред, сделайте все параметры обязательными для заполнения. За угадыванием надо к гадалке ходить, а не программы писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 17:52 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
andy st Tketano, делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 18:03 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
PaulYoung andy st Tketano, делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when Человек хочет боль, человек получит боль ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 18:05 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Соглашаясь с тем что это боль поддерживаю вариант 1 с маской полей (или несколькими масками если полей много) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 18:20 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Вы еще определитесь с тем, кто же по планам будет больше страдать в процессе разработки взаимодействия клиентского ПО с базой - разработчик клиентского софта или разработчик субд. Ну и к этому прикрутите их квалификацию. Если разраб клиента "эпичен", а разработчик субд из начинающих - пусть колбасят ad-hoc на update на клиенте, не такая сложная задача. Это если контроли в хп можно на триггеры заменить Если разраб клиента умеет подставлять параметры в процедуру, а разраб СУБД крут - любой вариант с сложной и поддерживаемой с болью логикой в процедуре, в том числе и вариант с параметрами "название поля" и "значение поля" - не факт что такой разработчик клиента осилит запилить маску полей для заполнения Если оба достаточно компетентны - развлекайтесь как вам угодно, благо возможностей для реализации такого глума тьма ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 19:06 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano felix_ff Tketano, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
? Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД. ну окей, объявите у параметров явные дефолты и сверяйтесь с ними Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
нужно правда придумать такие дефолты которые в принципе никогда не встретятся в качестве реальных значений таблицы. но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части. сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:10 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
felix_ff нужно правда придумать такие дефолты которые в принципе никогда не встретятся в качестве реальных значений таблицы. гуиды вполне проканают, для параноиков - пара гуидов felix_ff но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части. сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД лови первый :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:20 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Принимать на входе XML/Json и формировать по нему динамический Update предлагали? Если плевать на производительность, то может прокатить. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:36 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
А потом тредстартер прочитает что ему тут насоветовали и скажет: "да ну нахрен, пойду в дворники" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 21:52 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
.Евгений Принимать на входе XML/Json и формировать по нему динамический Update предлагали? Если плевать на производительность, то может прокатить. хотите пострадать фигней? :) CLR процедуры сохраняют свои default value параметров в sys.parameters. если прямо сильно заморочиться можно нарисовать CLR обертку где дефолты будут явно тянуться при явном игноре входного параметра. другой вопрос: что скажут остальные разрабы когда создатель любой "мегофичи" уволится, а им потребуется насладится поддержкой его "высокого полета мысли" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 01:43 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
felix_ff, трансляция XML в Update в общем не сложна, логика наглядна. Думаю, что поддерживать такое было бы менее противно, чем описанное вами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 16:17 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano Guf, авторВариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано. Есть сущности, содержащие более 100 столбцов. Объявлять овер 100 переменных и начитывать их перед EXEC - ну такое себе. И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП. Люди-то в основном злые, не стоит расчитывать на понимание ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2021, 20:05 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
felix_ff Tketano пропущено... Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД. ну окей, объявите у параметров явные дефолты и сверяйтесь с ними Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
нужно правда придумать такие дефолты которые в принципе никогда не встретятся в качестве реальных значений таблицы. но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части. сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД Код: sql 1. 2. 3. 4. 5.
Универсальные лисапеды всегда громоздки... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 11:28 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Tketano И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП. Или можно делать контроль в триггерах. Про всё это уже написали, я уверен, что эти решения будут лучше, чем изощрённая логика со 100 флагами. Проще для разработки, для расширения функционала, для сопровождения, и будут содержать меньше ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 14:03 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
alexeyvg Tketano И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП. Или можно делать контроль в триггерах. Про всё это уже написали, я уверен, что эти решения будут лучше, чем изощрённая логика со 100 флагами. Проще для разработки, для расширения функционала, для сопровождения, и будут содержать меньше ошибок. Подход "сделать процедуры для изменения любого набора полей" противоречит вашему же подходу "обрабатывать данные в СУБД, предоставляя API клиентам (серверам приложений и др.)" Вы хотите дать возможность делать ad-hoc запросы к базе, только через процедуры, что абсолютно лишено смысла как бизнес, так и технологического. Процедуры ради процедур. Вырождение идеи "СУБД предоставляет API для работы с данными". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 14:11 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Код: sql 1.
это не может получаться только при отсутствии желания это делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2021, 21:46 |
|
Шаблон SP для определения переданных параметров
|
|||
---|---|---|---|
#18+
Всем спасибо за мнения! Динамический SQL явно мимо; финальные контроли осуществляются на сервере. Может изначально плохо пояснил задачу. Смысл в том, что есть много входных точек для изменения данных (api), реализующих разные форматы и разный набор полей. Соответственно вопрос был в обновлении информации в базе данных (после приема входящего запроса). Пока остановились на следующем варианте: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Хотя итоговое решение не понравилось (вызов такой ХП выглядит "неестественным"). Пока будет использоваться исключительно локально (для решения конкретной задачи). Возможно, часть контролей будет перенесена + прямой UPDATE таблицы + прочая логика процедуры usp_update. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2021, 12:17 |
|
|
start [/forum/topic.php?fid=46&fpage=9&tid=1684094]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 370ms |
0 / 0 |