Мне нужно выполнить upsert из select, например this, но в SQL Server. Я обнаружил, что кто-то делает апсерт в SQL Server здесь, но это не из избранного.
Мой запрос сейчас выглядит примерно так:
INSERT INTO (table1) (...)
SELECT (...)
FROM (table 2)
WHERE X NOT IN (SELECT Y from (table1) WHERE Y IS NOT NULL)
Но не могу понять, как добавить часть обновления. Я хотел бы добавить часть обновления, так как в 99% случаев это будет вставка.
Изменить: этот код работал бы, если бы я мог сделать это из SELECT
:
BEGIN TRY
INSERT INTO table1 (id, name, itemname, itemcatName, itemQty)
VALUES ('val1', 'val2', 'val3', 'val4', 'val5')
END TRY
BEGIN CATCH
UPDATE table1
SET name = 'val2',
itemname = 'val3',
itemcatName = 'val4',
itemQty = 'val5'
WHERE id = 'val1'
END CATCH
MERGE
? Он создан для этой цели и, вероятно, более эффективен. - person Patrick Honorez   schedule 04.07.2018