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

Откуда:
Сообщений: 106
Добрый день. Подскажите как сделать update из временной таблицы, в которой может быть несколько строк.

Insert делаю так:
INSERT INTO [table1]
([data1], [data2],  [data3], [data4])
SELECT * FROM #insert_ddl;

DROP TABLE #insert_ddl;


А вот как сделать update?
UPDATE [table1]
SET [data3] = ?
WHERE [data1] = ?

DROP TABLE #update_ddl;
4 дек 19, 09:53    [22031805]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 641
Hopfen_Artur,

пример L
4 дек 19, 10:04    [22031817]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Guf,

Спасибо, where теперь не очень понятна
UPDATE [table1]
SET [data3] = d.[data3]
FROM #update_ddl AS d
WHERE [data1] = ?

DROP TABLE #update_ddl;
4 дек 19, 10:11    [22031825]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Вот так правильно будет?

UPDATE [table1]
SET [data3] = d.[data3]
FROM #update_ddl AS d
WHERE [table1].[data1] = d.[data1]

DROP TABLE #update_ddl;
4 дек 19, 10:13    [22031828]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Я к тому что например во временной таблице #update_ddl несколько строк

#update_ddl

data1 data3
1 100
2 200
3 300
4 дек 19, 10:23    [22031835]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4727
Hopfen_Artur
Я к тому что например во временной таблице #update_ddl несколько строк

#update_ddl

data1 data3
1 100
2 200
3 300



Напишите сначала SELECT, который джойнит целевую таблицу и таблицу источник-данных.

Потом согласно примерам, которые вам привели по ссылке выше, переделайте его в UPDATE.

Необходимо, чтобы JOIN был однозначным, то есть для каждой целевой строки было бы не более одного значения в таблице источнике.
4 дек 19, 10:36    [22031842]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 106
Я потестил, все хорошо. Всем спасибо.
4 дек 19, 10:59    [22031852]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
court
Member

Откуда:
Сообщений: 2016
a_voronin
Необходимо, чтобы JOIN был однозначным, то есть для каждой целевой строки было бы не более одного значения в таблице источнике.

это для MERGE вроде требование ...
UPDATE по-либеральнее будет :)

другое дело, что результат будет, в принципе "случайный"
create table #t1 (id int, txt varchar(10) )
create table #t2 (id int, txt varchar(10) )

insert into #t1 values (1,'a'),(1,'b')
insert into #t2 values (1,'x'),(1,'y')

update t1 
set t1.txt = t2.txt
from #t1 t1 inner join #t2 t2 on t1.id = t2.id

select * from #t1

--
drop table #t1
drop table #t2

idtxt
1x
1x
4 дек 19, 11:02    [22031856]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4727
court
a_voronin
Необходимо, чтобы JOIN был однозначным, то есть для каждой целевой строки было бы не более одного значения в таблице источнике.

это для MERGE вроде требование ...
UPDATE по-либеральнее будет :)

другое дело, что результат будет, в принципе "случайный"


Даже если это прокатывает, это не есть хорошая практика. Как минимум, это плохо по производительности. Есть смысл дедублицировать входные данные по ROW_NUMBER .
4 дек 19, 11:22    [22031874]     Ответить | Цитировать Сообщить модератору
 Re: Update из временной таблицы  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
a_voronin
Как минимум, это плохо по производительности. Есть смысл дедублицировать входные данные по ROW_NUMBER .
Ну да, row_number благотворно скажется на производительности...
UPDATE сам "дедублицирует", причем приделывание row_number этот механизм не отключит. В результате - двойная лишняя работа, улучшающая производительность.
4 дек 19, 11:54    [22031912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить