Вопрос:
Нужно вставить строку, если она не существует, и обновить, если она существует. Я нашел это решение для MySQL:
INSERT INTO table (id, name, age) VALUES(1, «A», 19) ON DUPLICATE KEY UPDATE
имя = “А”, возраст = 19
Но я не могу найти подобное для MSSQL..
Лучший ответ:
Вы можете использовать 2 оператора (INSERT + UPDATE) в следующем порядке. Обновление не обновит ничего, если оно не существует, вставка не будет вставлено, если оно существует:
UPDATE T SET name = ‘A’, age = 19 FROM [table] AS T WHERE T.id = 1 INSERT INTO [table] ( id, name, age) SELECT id = 1, name = ‘A’, age = 19 WHERE NOT EXISTS (SELECT ‘not yet loaded’ FROM [table] AS T WHERE T.id = 1)
Или MERGE:
;WITH ValuesToMerge AS ( SELECT id = 1, name = ‘A’, age = 19 ) MERGE INTO [table] AS T USING ValuesToMerge AS V ON (T.id = V.id) WHEN NOT MATCHED BY TARGET THEN INSERT ( id, name, age) VALUES ( V.id, V.name, V.age) WHEN MATCHED THEN UPDATE SET name = V.name, age = V.name;