Я рассмотрел различные примеры оператора SQL Merge ... все они выглядят превосходно, хотя по какой-то причине я не могу получить правильные / ожидаемые результаты от моего теста Merge.
Быстрый обзор:
У меня есть простая таблица с некоторыми проектными данными ... и чтение о MERGE, кажется, указывает на более эффективный способ 'upsert' (т.е. вставка или обновление в зависимости от того, существует ли запись или нет).
Итак, код SQL 2008 выглядит примерно так (извините, если он не полностью завершен, так как я над ним работаю!):
Это будет хранимая процедура, поэтому @values, очевидно, являются переданными параметрами ..
merge designs as ds
using ( select designname, designcode from designs) as dsi
on (@passedDesignName = dsi.designname and @passedDesignCode = dsi.designcode)
when matched then
update set ds.designname = @passedDesignName, ds.designcode = @passedDesignCode
when not matched then
insert (designname, designcode)
values (@passedDesignName, @passedDesignCode)
Проблема, кажется, из 7 записей, с которыми я тестирую, ВСЕ из них, кажется, обновляются, когда ясно, что я вижу только одну запись, которая соответствует обновлению ... и странная вещь, если я пропускаю некоторые НОВЫЕ данные (designname и designcode), я, кажется, получаю повторяющуюся вставку .. из моего последнего теста показалось, что 7 новых вставок, которые, я предполагаю, не просто случайность ..
Надеюсь, я все правильно объяснил ... часть атаки на что-то новое в основном приводит к правильному контексту?
Заранее спасибо за любые отзывы.
P.S: Извините, в конце оператора слияния стоит точка с запятой! завершить проверку / синтаксический анализ.