Думаю, я слишком долго смотрел на это утверждение. Может ли кто-нибудь сказать мне, почему часть обновления этого утверждения не обновляется? Я думаю, что, тестировав с помощью столбцов и !=
, это должно вызывать причину обновлений только тогда, когда это необходимо - вместо этого я, похоже, случайно создал условие .. где обновление никогда не понадобилось!SQL Server: часть обновления слияния не работает
Здесь 4 вещи, которые необходимо знать перед тем, как смотреть на инструкцию:
1. Данные в таблице temp #Facilities заполняются самыми современными данными из нескольких источников. Эти данные содержат бот new (insert) и изменены (update) данные.
2. Содержимое #Facilities проверено, чтобы содержать данные, перед выполнением оператора Merge.
3. Вставка части выражения слияния завершается успешно.
4. Хотя часть обновления инструкции не обновляет измененные данные, оператор не прерывается.
MERGE INTO PhoneMaster AS facilitymaster
USING #Facilities as facilitynew
ON facilitymaster.facilityid = facilitynew.facilityid
AND facilitymaster.siteid = facilitynew.siteid
WHEN MATCHED AND
(
facilitymaster.User__bID != facilitynew.User__bID
or facilitymaster.Email__baddress != facilitynew.Email__baddress
or facilitymaster.Facility__bName != facilitynew.Facility__bName
or facilitymaster.Division != facilitynew.Division
or facilitymaster.District != facilitynew.District
) THEN
UPDATE SET
facilitymaster.User__bID = facilitynew.User__bID,
facilitymaster.Email__baddress = facilitynew.Email__baddress,
facilitymaster.Facility__bName = facilitynew.Facility__bName,
facilitymaster.Division = facilitynew.Division,
facilitymaster.District = facilitynew.District
WHEN NOT MATCHED THEN
INSERT
(User__bID,
Email__baddress,
Facility__bName,
Division,
District,
FacilityId,
SiteId
)
VALUES
(
facilitynew.User__bID,
facilitynew.Email__baddress,
facilitynew.Facility__bName,
facilitynew.Division,
facilitynew.District,
facilitynew.FacilityId,
facilitynew.SiteId
);
Зачем вам нужен MERGE? Как вы думаете, что он покупает вас (кроме более сложного и трудно отлаживаемого синтаксиса)? Кажется, вы могли бы добиться этого гораздо проще с помощью 'UPDATE WHERE EXISTS/INSERT WHERE NOT EXISTS'. –
@ Аарон, почему бы не использовать слияние для чего-то подобного? Я не вижу, чтобы синтаксис был как можно более сложным. Здесь есть пробел между тем, что, как я думаю, должно работать, и почему это не так. Любые идеи о том, почему эта логика не работает? – plditallo
У меня нет энергии, чтобы смотреть на логику, но вот почему я не использую MERGE (помимо синтаксиса невозможного запоминания): http://www.sqlperformance.com/2013/02/t -sql-query/another-merge-bug (пожалуйста, прочитайте весь пост). –