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

Откуда:
Сообщений: 2083
Есть 2 таблицы. Источник
idxvalue
10a
10b
10c
10d

Приемник
idxvalue
10b
10e
10f

В результате надо получить как в источнике
idxvalue
10a
10b
10c
10d

Т.е. value=b оставляем, e и f - удаляем; a, c и d - вставляем
Решается просто через 2 операции: полное удаление из приемника, где idx = 10 и insert from источник, где idx = 10
Хотелось бы сделать за 1 шаг. Пробовал через merge - не вышло
declare @s table (idx int, value char(1))
declare @t table (idx int, value char(1))
insert @s values (10,'a'), (10,'b'), (10,'c'), (10,'d')
insert @t values (10,'b'), (10,'e'), (10,'f')

select * from @s
select * from @t

merge @t as targ
using @s as sour on (targ.idx = sour.idx and targ.value = sour.value)
when matched and (sour.value <> targ.value) then delete
when not matched then insert(idx,value) values (sour.idx, sour.value);

select * from @t
14 фев 14, 14:33    [15568252]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом MERGE.  [new]
Glory
Member

Откуда:
Сообщений: 104751
user89
Т.е. value=b оставляем, e и f - удаляем; a, c и d - вставляем

Если ваш алогритм завязан на порядке строк, то где поле, отвкечающее за этот самый порядок ?
14 фев 14, 14:45    [15568346]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом MERGE.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
MERGE @t t
USING @s s ON t.idx=s.idx AND t.value=s.value
WHEN NOT MATCHED BY SOURCE THEN DELETE
WHEN NOT MATCHED THEN INSERT(idx,value)VALUES(s.idx,s.value);
14 фев 14, 14:46    [15568367]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом MERGE.  [new]
Добрый Э - Эх
Guest
Glory,

где тебе тут увиделся порядок строк и завязка на него алгоритма обработки ?
всё что хочет автор - вставить отсутствующие записи из источника в приемник, удалив из приемника отсутствующие в источнике данные.
14 фев 14, 14:48    [15568395]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом MERGE.  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
"Решается просто через 2 операции: полное удаление из приемника"

сначала добавить новые из т1, которых нет в т2 (a,c,d), затем удалить те, которых нет в т1 (e,f).
14 фев 14, 14:51    [15568418]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом MERGE.  [new]
user89
Member

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

спасибо! Работает как надо!
14 фев 14, 15:11    [15568613]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить