powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шаблон SP для определения переданных параметров
34 сообщений из 34, показаны все 2 страниц
Шаблон SP для определения переданных параметров
    #40111304
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день!

В хранимой процедуре необходимо понимать, какие параметры не были переданы, а каким параметрам передано значение NULL (т.е. определить смысл значения NULL). Это необходимо для реализации логики обновления полей (если не передано значение - не трогаем, передано - обновляем). У кого-нибудь есть пример шаблона хранимой процедуры для решения данной задачи?

Вижу 2 варианта.
1) Ввести входной параметр маски реально переданных параметров (т.е. вызывающая сторона уточняет перечень передаваемых параметров);
2) Определить специальные значения входных параметров, которые будут указывать, что передано пустое значение (т.е. default значение null означает отсутствие передачи параметра, а пустая строка, например для varchar, означает необходимость сбросить значение поля в БД в NULL).

Спасибо)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111313
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

Вариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111343
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = null,
         @val2 varchar(255) = null
as
update [dbo].[tbl]
   set [val1] = isnull(@val1, [val1]),
       [val2] = isnull(@val2, [val2])
where [id] = @id;



?
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111353
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guf,
авторВариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано.
Есть сущности, содержащие более 100 столбцов. Объявлять овер 100 переменных и начитывать их перед EXEC - ну такое себе.
И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111356
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
Tketano,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = null,
         @val2 varchar(255) = null
as
update [dbo].[tbl]
   set [val1] = isnull(@val1, [val1]),
       [val2] = isnull(@val2, [val2])
where [id] = @id;



?


Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111413
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tketano,
делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111417
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А есть еще вариант реализации, поражающий своим безграничным ужасом - формировать update нужного поля (или полей) на клиенте.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111459
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

это кручу-верчу бред, сделайте все параметры обязательными для заполнения. За угадыванием надо к гадалке ходить, а не программы писать.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111462
Фотография PaulYoung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy st
Tketano,
делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when
Не дай Бог такое унаследовать и поддерживать. Боль.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111463
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulYoung
andy st
Tketano,
делайте тогда процедуру, у которой на входе будет названия поля и значение (или несколько в зависимости от типов данных, или с преобразованием в зависимости от типа поля целевой таблицы) и внутри процедуры пилите динамический sql на изменение конкретного поля или портянку на 100500 строк с условиями/case when
Не дай Бог такое унаследовать и поддерживать. Боль.

Человек хочет боль, человек получит боль
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111469
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соглашаясь с тем что это боль

поддерживаю вариант 1 с маской полей (или несколькими масками если полей много)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111499
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы еще определитесь с тем, кто же по планам будет больше страдать в процессе разработки взаимодействия клиентского ПО с базой - разработчик клиентского софта или разработчик субд. Ну и к этому прикрутите их квалификацию.
Если разраб клиента "эпичен", а разработчик субд из начинающих - пусть колбасят ad-hoc на update на клиенте, не такая сложная задача. Это если контроли в хп можно на триггеры заменить
Если разраб клиента умеет подставлять параметры в процедуру, а разраб СУБД крут - любой вариант с сложной и поддерживаемой с болью логикой в процедуре, в том числе и вариант с параметрами "название поля" и "значение поля" - не факт что такой разработчик клиента осилит запилить маску полей для заполнения
Если оба достаточно компетентны - развлекайтесь как вам угодно, благо возможностей для реализации такого глума тьма
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111542
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
felix_ff
Tketano,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = null,
         @val2 varchar(255) = null
as
update [dbo].[tbl]
   set [val1] = isnull(@val1, [val1]),
       [val2] = isnull(@val2, [val2])
where [id] = @id;



?


Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД.


ну окей, объявите у параметров явные дефолты и сверяйтесь с ними
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = '__default_va1',
         @val2 varchar(255) = '__default_val2'
as
update [dbo].[tbl]
   set [val1] = case when @val1 = '__default_val1' then [val1] else @val1 end,
       [val2] = case when @val2 = '__default_val2' then [val2] else @val2 end
where [id] = @id;



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

но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части.

сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111545
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
нужно правда придумать такие дефолты которые в принципе никогда не встретятся в качестве реальных значений таблицы.

гуиды вполне проканают, для параноиков - пара гуидов
felix_ff

но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части.

сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД

лови первый :)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111548
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принимать на входе XML/Json и формировать по нему динамический Update предлагали?
Если плевать на производительность, то может прокатить.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111555
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А потом тредстартер прочитает что ему тут насоветовали и скажет: "да ну нахрен, пойду в дворники"
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111626
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.Евгений
Принимать на входе XML/Json и формировать по нему динамический Update предлагали?
Если плевать на производительность, то может прокатить.


хотите пострадать фигней? :)

CLR процедуры сохраняют свои default value параметров в sys.parameters.
если прямо сильно заморочиться можно нарисовать CLR обертку где дефолты будут явно тянуться при явном игноре входного параметра.
другой вопрос: что скажут остальные разрабы когда создатель любой "мегофичи" уволится, а им потребуется насладится поддержкой его "высокого полета мысли" :)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111713
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

трансляция XML в Update в общем не сложна, логика наглядна. Думаю, что поддерживать такое было бы менее противно, чем описанное вами.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111747
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
Guf,
авторВариант 3. Не выворачивать мозги. Передавать всегда и всё и обновлять тем, что передано.

Есть сущности, содержащие более 100 столбцов. Объявлять овер 100 переменных и начитывать их перед EXEC - ну такое себе.
И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП.

Люди-то в основном злые, не стоит расчитывать на понимание
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111825
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Tketano
пропущено...


Это работает до тех пор, пока вам не надо "пропихнуть" NULL как реальное значение. Т.е. вы никогда не сможете обnullить значение в БД.


ну окей, объявите у параметров явные дефолты и сверяйтесь с ними
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = '__default_va1',
         @val2 varchar(255) = '__default_val2'
as
update [dbo].[tbl]
   set [val1] = case when @val1 = '__default_val1' then [val1] else @val1 end,
       [val2] = case when @val2 = '__default_val2' then [val2] else @val2 end
where [id] = @id;



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

но имхо: по большей части вы занимаетесь ерундой, контроль правильности значений должен быть на стороне сервера приложений/клиентской части.

сейчас в меня полетят ссаные тряпки адептов реализации бизнес логики на стороне СУБД



Код: sql
1.
2.
3.
4.
5.
create or alter procedure [usp_update]
         @id int,
         @val1 varchar(255) = null, @val1On bit = 0,
         @val2 varchar(255) = null, @val2On bit = 0
as



Универсальные лисапеды всегда громоздки...
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111853
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП.
Разбить обновления на разные ХП можно всегда.
Или можно делать контроль в триггерах.
Про всё это уже написали, я уверен, что эти решения будут лучше, чем изощрённая логика со 100 флагами.
Проще для разработки, для расширения функционала, для сопровождения, и будут содержать меньше ошибок.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111856
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Tketano
И, часто, надо обновить лишь небольшую часть столбцов. Понятно, что бизнес-логика должна быть разбита по разным ХП, но не всегда и не везде это получается. Прямые UPDATE на таблицу не рассматриваются, т.к. пролетают мимо важных контролей внутри ХП.
Разбить обновления на разные ХП можно всегда.
Или можно делать контроль в триггерах.
Про всё это уже написали, я уверен, что эти решения будут лучше, чем изощрённая логика со 100 флагами.
Проще для разработки, для расширения функционала, для сопровождения, и будут содержать меньше ошибок.
Я даже больше скажу.

Подход "сделать процедуры для изменения любого набора полей" противоречит вашему же подходу "обрабатывать данные в СУБД, предоставляя API клиентам (серверам приложений и др.)"
Вы хотите дать возможность делать ad-hoc запросы к базе, только через процедуры, что абсолютно лишено смысла как бизнес, так и технологического. Процедуры ради процедур. Вырождение идеи "СУБД предоставляет API для работы с данными".
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40111956
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
но не всегда и не везде это получается



это не может получаться только при отсутствии желания это делать.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112035
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за мнения! Динамический SQL явно мимо; финальные контроли осуществляются на сервере. Может изначально плохо пояснил задачу. Смысл в том, что есть много входных точек для изменения данных (api), реализующих разные форматы и разный набор полей. Соответственно вопрос был в обновлении информации в базе данных (после приема входящего запроса).
Пока остановились на следующем варианте:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create or alter procedure [usp_update_some_rekv]
	@id	int,
	@val1	int		= null,	-- -1 = сбросить в null (значение -1 не допускается бизнес-логикой)
	@val2	varchar(255)	= null,	-- '' = сбросить в null (пустая строка не допускается бизнес-логикой)
	@val3	date		= null	-- '' = сбросить в null (1900 год не допускается бизнес-логикой)
as

select	@val1 = case when @val1 = -1 then null else isnull(@val1, val1) end,
	@val2 = case when @val2 = '' then null else isnull(@val2, val2) end,
	@val3 = case when @val3 = '' then null else isnull(@val3, val3) end
from	[dbo].[tbl]
where	[id] = @id;

-- базовая процедура для записи параметров "как есть"
exec dbo.usp_update
		@id	= @id,
		@val1	= @val1,
		@val2	= @val2,
		@val3	= @val3
go



Хотя итоговое решение не понравилось (вызов такой ХП выглядит "неестественным"). Пока будет использоваться исключительно локально (для решения конкретной задачи). Возможно, часть контролей будет перенесена + прямой UPDATE таблицы + прочая логика процедуры usp_update.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112049
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
@val3	date
...
@val3 = case when @val3 = ''
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112088
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

вы же сами указывали на проблему "пропихнуть" NULL как реальное значение"

в вашем решение в случае
Код: sql
1.
2.
3.
4.
5.
exec dbo.usp_update
		@id	= @id,
		@val1	= @val1,
		@val2	= null,
		@val3	= @val3



вы значение @val2 потеряете


aleks222Универсальные лисапеды всегда громоздки...


в процедуре 1000 параметров, добавите еще 1000?
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112095
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Да, в базовой процедуре update 100+ параметров, значит придется и в обертке объявить 100+ параметров и поставить 100+ case. Сейчас без обертки то не лучше - начитай недостающие 100 параметров c case из таблицы и потом сделай EXEC базовой процедуры. Тут же не стоит вопрос уменьшения кода (хотя этот вариант в любом случае короче), вопрос скорее в понятности и дальнейшей поддержке. Например, в базовую процедуру достаточно часто вводятся новые параметры.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
в вашем решение в случае
exec dbo.usp_update
		@id	= @id,
		@val1	= @val1,
		@val2	= null,
		@val3	= @val3


вы значение @val2 потеряете



При таком вызове да. Но я же буду вызывать обертку и значение сохранится:
Код: sql
1.
2.
3.
4.
5.
exec dbo.usp_update_some_rekv
		@id	= @id,
		@val1	= @val1,
		@val2	= null,
		@val3	= @val3



А при передачи @val2 = '' значение будет сброшено в null.
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112145
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
Всем спасибо за мнения! Динамический SQL явно мимо; финальные контроли осуществляются на сервере. Может изначально плохо пояснил задачу. Смысл в том, что есть много входных точек для изменения данных (api), реализующих разные форматы и разный набор полей. Соответственно вопрос был в обновлении информации в базе данных (после приема входящего запроса).
Пока остановились на следующем варианте:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create or alter procedure [usp_update_some_rekv]
	@id	int,
	@val1	int		= null,	-- -1 = сбросить в null (значение -1 не допускается бизнес-логикой)
	@val2	varchar(255)	= null,	-- '' = сбросить в null (пустая строка не допускается бизнес-логикой)
	@val3	date		= null	-- '' = сбросить в null (1900 год не допускается бизнес-логикой)
as

select	@val1 = case when @val1 = -1 then null else isnull(@val1, val1) end,
	@val2 = case when @val2 = '' then null else isnull(@val2, val2) end,
	@val3 = case when @val3 = '' then null else isnull(@val3, val3) end
from	[dbo].[tbl]
where	[id] = @id;

-- базовая процедура для записи параметров "как есть"
exec dbo.usp_update
		@id	= @id,
		@val1	= @val1,
		@val2	= @val2,
		@val3	= @val3
go



Хотя итоговое решение не понравилось (вызов такой ХП выглядит "неестественным"). Пока будет использоваться исключительно локально (для решения конкретной задачи). Возможно, часть контролей будет перенесена + прямой UPDATE таблицы + прочая логика процедуры usp_update.


итоговое решение выглядит "нетрадиционным" в понятном смысле этого слова
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112180
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
Пока остановились на следующем варианте:

Ой, а сначала сказали, что так точно не подходит :-)
Tketano
Смысл в том, что есть много входных точек для изменения данных (api), реализующих разные форматы и разный набор полей.
Так и делайте несколько входных точек (api).
Вы хотите сделать одну входную точку для всего приложения? Поверьте, нехорошо получится
Впрочем большинство учится только на своих ошибках, вы же (и никто из ваших коллег) ещё не сделали проект, который люди сейчас называют легаси? :-) Судя по стремлению к "универсальному коду"
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112182
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
итоговое решение выглядит "нетрадиционным" в понятном смысле этого слова
Да, понятность кода поражает.

Доктор, понимаете, мой муж работает программистом, и он последний год стал часто смотреть индусский код.
А иногда, по ночам, когда думает, что я его не вижу, он его себе вставляет. И это ему нравится!
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112201
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Ролг Хупин
итоговое решение выглядит "нетрадиционным" в понятном смысле этого слова
Да, понятность кода поражает.

Доктор, понимаете, мой муж работает программистом, и он последний год стал часто смотреть индусский код.
А иногда, по ночам, когда думает, что я его не вижу, он его себе вставляет. И это ему нравится!


(Y)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112215
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

авторОй, а сначала сказали, что так точно не подходит :-)Нет, я такое не писал, Вы меня с кем-то перепутали =) Я сразу озвучил эту идею под вторым вариантом.
И в серверной части итак хватает старого легаси-кода, в основном связанного с динамическим sql))) Хламить не хочется, даже для решения небольшой задачи.

авторТак и делайте несколько входных точек (api).
Вы хотите сделать одну входную точку для всего приложения? Поверьте, нехорошо получитсяНет. Немного love story.
Есть базовая процедура для изменения сущности БД (usp_update в примере выше). На вход принимается полный перечень параметров и записывается в БД "как есть". При этом в процедуре реализуется прочая логика по проверкам, записи в логи и пр. Основная система в основном и дергает данную процедуру, т.к. почти всегда обладает информацией о полном состоянии объекта.
Однако есть и другие точки входа (различные api) для коррекции информации (включая xml/json форматы). Там перечень параметров гораздо уже. Общий подход следующий:
- если параметр не определен форматом, то оставляем текущее значение БД;
- если значение параметра/тега указано, то записываем в БД (включая пустое значение => NULL);
- если параметр/тег отсутствует, то оставляем текущее значение БД.
И проблема как раз в том, что код в этих точках входа (api) уже весьма сложный и неочевидный, с большими свистоплясками, чтобы вызвать базовую процедуру или выполнить прямой UPDATE. В первом случае это начитка большого числа параметров (текущее состояние в БД), а во втором это вынесенные контроли + запись в логи и пр. логика (хотя сам UPDATE таблицы смотрится конечно максимально читабельно). Делать свой вариант usp_update под каждый API выглядит трудозатратным (тем более там небольшая разница от api к api). Какая-нибудь обертка поверх базовой usp_update, которую можно было бы дергать из каждой точки входа (api), значительно бы упростила логику. Вопрос открыт :-)
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40112245
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

В качестве идеи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare @t table (id int primary key, f1 int, f2 int, f3 int, f4 int);
insert into @t
values
 (1, 1, 2, 3, 4);

select * from @t;

declare @id int = 1, @f1 int, @f2 int, @f3 int, @f4 int;
declare @params xml = '<params f1 = "10" f4 = ""/>';

select
 @f1 = case when @params.exist('/params[1][@f1]') = 1 then @params.value('xs:integer(/params[1]/@f1)', 'int') else f1 end,
 @f2 = case when @params.exist('/params[1][@f2]') = 1 then @params.value('xs:integer(/params[1]/@f2)', 'int') else f2 end,
 @f3 = case when @params.exist('/params[1][@f3]') = 1 then @params.value('xs:integer(/params[1]/@f3)', 'int') else f3 end,
 @f4 = case when @params.exist('/params[1][@f4]') = 1 then @params.value('xs:integer(/params[1]/@f4)', 'int') else f4 end
from
 @t
where
 id = @id;

update @t
 set
  f1 = @f1, f2 = @f2, f3 = @f3, f4 = @f4
where
 id = @id;

select * from @t;
...
Рейтинг: 0 / 0
Шаблон SP для определения переданных параметров
    #40113168
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Спасибо за мысль. XML собирать в некоторых случаях может быть чуть труднее, но безусловно логика процедуры становится более прозрачной. На самом деле в некоторые точки (api) на вход и прилетают такие xml :)
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Шаблон SP для определения переданных параметров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]