ЕСЛИ СУЩЕСТВУЕТ ТОЛЬКО ОБНОВЛЕНИЕ, ЧТО-ТО НЕ ВСТАВЛЯЕТСЯ В SQL Server 2008
Мне сообщили, что MERGE может быть полезен, но мои данные, кажется, не подходят для этого - он пытается ОБНОВИТЬ записи дважды, потому что в исходной таблице есть повторяющиеся записи
IF EXISTS (select 1
from SCM_Top_Up_Operational O
join SCM_Top_Up_Rolling R ON O.String = R.string)
BEGIN
UPDATE O SET O.Date_Added = R.Date_Added,
O.Real_Exfact = R.Real_Exfact,
O.Excess_Top_Up = R.Excess_Top_Up
FROM SCM_Top_Up_Operational O JOIN SCM_Top_Up_Rolling R ON O.String = R.String
WHERE O.String = R.string
AND R.Date_Added > O.Date_Added;
END
ELSE
BEGIN
INSERT INTO SCM_Top_Up_Operational (String,Date_Added,Real_Exfact,Article_ID,Excess_Top_Up,Plant)
SELECT R.String,R.Date_Added,R.Real_Exfact,R.Article_ID,R.Excess_Top_Up,R.Plant
FROM SCM_Top_Up_Rolling R
WHERE R.String NOT IN (SELECT String FROM SCM_Top_Up_Operational)
END
Ожидаемым результатом будет ОБНОВЛЕНИЕ любых записей в таблице «Оперативные» с добавлением последней записи МОСТ в таблицу «прокручивания» - это достигается с помощью JOIN в поле «Строка», которое является уникальным в «Оперативном» 'но дублируется в таблице' Rolling '. Единственное отличие состоит в 'Date_Added' - это то место, где я должен был бы ОБНОВИТЬ самую последнюю запись в таблице 'Rolling'. Если совпадений нет, переходите к оператору INSERT, где он будет вставлять любые строки, которые присутствуют в таблице «Rolling», но отсутствуют в таблице «Operational». Я исследовал много других потоков, и этот синтаксис выглядит правильно.
В чем проблема:
Если я выполняю весь оператор, часть UPDATE работает нормально, но ELSE INSERT ничего не делает - однако, если я запускаю INSERT самостоятельно, он также работает нормально. Я предполагаю, что мне не хватает чего-то маленького в синтаксисе. Как уже упоминалось, мне посоветовали использовать MERGE, но из-за характера моих данных - оператор ON в MERGE дважды найдет первичный ключ из исходной таблицы и выдаст ошибку. Любые идеи, что я могу упустить в этом коде? Я довольно хорошо разбираюсь в SQL, но эти типы утверждений несколько новы для меня ..