Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
msleg
Member

Откуда: Москва
Сообщений: 566
Добрый день! Пытаюсь сделать изменяющийся запрос на обновление данных. т.е в зависимости от значений обновлялись разные поля. Возможно ли такое? Нужно чтобы обновлялись данные за одну операцию.

вот типо такого
UPDATE [OLAP_DWH_DEV].[dbo].[_SELL_OUT_Customers]
		SET
                --
		if @Company_name<>'--'
			[Name]=@Company_name
		--
		if @Address_fact<>'--'
			[SOAddress]=@Address_fact
		--
		if @Address_legal<>'--'
			[Legal Address]=@Address_legal
		--
		if @Store_name<>'--'
			[City]=@City
		-- ...

		WHERE [Point_id]=111;
30 июн 15, 17:44    [17834127]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
msleg
Member

Откуда: Москва
Сообщений: 566
Или как вариант его изначально в виде текста построить, а потом запустить. Есть такая возможность в SQL Serverе?
30 июн 15, 17:48    [17834155]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
AnyKey45
Member

Откуда: Ekaterinburg-Moscow-EU
Сообщений: 219
msleg,

похоже?

declare @t table (i int,ii int)
declare @c int=1,@cc int =2
insert into @t(i,ii) values(1,1),(2,2),(3,3)
select * from @t
update @t
set i=case when @c=1 then @c end,
ii=case when @cc=2 then 20 end
select * from @t
30 июн 15, 17:56    [17834193]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
msleg
Добрый день! Пытаюсь сделать изменяющийся запрос на обновление данных. т.е в зависимости от значений обновлялись разные поля. Возможно ли такое? Нужно чтобы обновлялись данные за одну операцию.

вот типо такого
UPDATE [OLAP_DWH_DEV].[dbo].[_SELL_OUT_Customers]
		SET
                --
		if @Company_name<>'--'
			[Name]=@Company_name
		--
		if @Address_fact<>'--'
			[SOAddress]=@Address_fact
		--
		if @Address_legal<>'--'
			[Legal Address]=@Address_legal
		--
		if @Store_name<>'--'
			[City]=@City
		-- ...

		WHERE [Point_id]=111;

Типа так:
UPDATE [OLAP_DWH_DEV].[dbo].[_SELL_OUT_Customers]
		SET
                --
		[Name] = case when @Company_name<>'--' then @Company_name else [Name] end,
		--
		[SOAddress] = case when @Address_fact<>'--' then @Address_fact else [SOAddress] end
		-- ...

		WHERE [Point_id]=111;
30 июн 15, 18:02    [17834217]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
msleg
Member

Откуда: Москва
Сообщений: 566
Minamoto,

c case мне подойдет вариант) спасибо))
30 июн 15, 18:35    [17834361]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
msleg, обновляйте все поля как новыми, так и старыми значениями. Создаёте проблему на пустом месте :)
1 июл 15, 11:55    [17836855]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
Павел Яковлев
Member

Откуда: Петербург
Сообщений: 11
А какой вариант более правильный, с CASE или сформировать текстовую строку и потом запустить ее ?
1 июл 15, 12:06    [17836948]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Павел Яковлев
А какой вариант более правильный, с CASE или сформировать текстовую строку и потом запустить ее ?
с CASE
1 июл 15, 12:07    [17836958]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
Wlr-l
Member

Откуда:
Сообщений: 602
Павел Яковлев
А какой вариант более правильный, с CASE или сформировать текстовую строку и потом запустить ее ?

Оба варианта не правильные.
Первый, потому что все равно обновляются все поля либо значением из переменной, либо значением из поля таблицы.
Второй, потому что получаем динамический запрос.

В приложении в форме ввода все эти данные уже есть. Достаточно изменить один или несколько из них, а остальные останутся неизменными, передать их в параметры процедуры и выполнить

UPDATE [OLAP_DWH_DEV].[dbo].[_SELL_OUT_Customers]
   SET [Name]         =@Company_name,
       [SOAddress]    =@Address_fact,
       [Legal Address]=@Address_legal,
       ...
 WHERE [Point_id]=111;

Просто нужно продумать форму ввода и изменения данных приложения.
1 июл 15, 12:59    [17837370]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать изменяющийся запрос SQL в зависимости от значений?  [new]
msleg
Member

Откуда: Москва
Сообщений: 566
Может кому-нибудь пригодиться инфа, как поместить в определенную переменную строку запроса, и потом его выполнить через спец. функцию. https://www.sql.ru/faq/faq_topic.aspx?fid=104
3 июл 15, 13:39    [17848523]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить