Я хочу сделать Upsert на столе из моей программы на Python. Я нашел команду MERGE, но, похоже, это специфично для объединения двух таблиц. Я хочу ОБНОВИТЬ / ВСТАВИТЬ поле в таблицу из одного запроса.
Я хочу что-то быстрее, чем УДАЛИТЬ, затем ВСТАВИТЬ или ВЫБРАТЬ, затем [ВСТАВИТЬ / ОБНОВИТЬ], и пытаюсь заставить MERGE работать. Однако, когда я запускаю его в SSMS, он обновляет все строки в таблице базы данных.
Запрос:
MERGE INTO [LastPriceUpdate] USING
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source
ON (source.[EventID] = 1501845)
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate());
Этот запрос обновляет все строки, и я хочу, чтобы он обновлял столбец LastPriceUpdate с помощью getdate (), где EventID = {somenumber}
Возможный ответ:
Это может быть исправлением; используйте цель на части ON.
MERGE INTO [LastPriceUpdate] AS target USING
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source
ON (target.[EventID] = 1501845)
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate());