2015-05-19 2 views
1

У меня есть несколько разных предметов, которые нужно скопировать в разные организации. Я сделал это с помощью оператора слияния. Я отлично работаю один раз, когда элементы не существуют, но в следующий раз, когда он должен обновлять, он создает новые элементы в каждой организации.Должен ли я сливаться здесь?

merge items as target 
using 
    (
    select items.name, items.value, items.org 
    from Items 
    ) as source 
on (target.items.name = source.items.name and 
    target.items.value = '50') 
when matched then 
    update set target.items.name = source.items.name 
when not matched by target then 
Insert(...) 
Values(...); 

Я предполагаю, что есть что-то TODO с этим условием это не распространяется право в следующий раз либо и новые элементы, создает, но я не понимаю, почему ..

Может подмигнули лучше просто сделать простой вставить?

+1

Если ваше условие содержит 'target.items.name = source.items.name', не имеет смысла обновлять имя цели при согласовании. –

+0

В таблице есть разные строки, которые необходимо обновить другими строками. Элементы из одной организации должны обновлять элементы в другой организации. –

+0

Мне не ясно, из вашего описания или вашего нерабочего кода, что вы хотите выполнить. Если у вас есть простая вставка, которая действительно работает, возможно, вы можете использовать ее в своем вопросе? – hvd

ответ

0

Элементы из одной организации должны обновлять элементы в другой организации.

Операция слияния не поддерживает обновление «других строк». Концептуально он работает по очереди. Источник и цель объединяются (полное внешнее соединение), и для каждого результата объединения вы решаете одно действие, которое происходит. Для обновления и удаления это действие происходит с объединенной целевой таблицей строк.

Вам нужно использовать несколько операторов.

Смежные вопросы