Я пытаюсь выполнить запрос на обновление, в котором обновляется одна строка таблицы и, если ничего не найдено и не обновлено, вставляется новая строка. В каждом случае мне нужен запрос, чтобы вернуть идентификатор вставленной строки.
Проблема, с которой я столкнулся, заключается в том, что этот запрос возвращает 2 отдельных результата, когда достигается регистр вставки, по одному на каждый вывод (первый пустой, второй с идентификатором). Я выполняю этот запрос, используя SQL Алхимия на python, и я могу видеть только первый результат, который является пустым.
UPDATE [Rights]
SET accessLevel = :access_level
OUTPUT inserted.rightsID
WHERE principal = :principal and [function] = :function
IF @@ROWCOUNT = 0
INSERT INTO Rights(principal, [function], accessLevel)
OUTPUT inserted.rightsID
VALUES(:principal, :function, :access_level)
И я называю его так:
inserted_right_id = session.execute(sql_rights_update, right).fetchall()
Кто-нибудь может порекомендовать способ изменить запрос, чтобы я все еще мог использовать метод UPSERT, но получить только один из идентификаторов? Я подумывал о том, чтобы сохранить значения OUTPUT в таблицу и вернуть их, или обернуть все это в выборку, но, надеюсь, есть что-то более элегантное.
Спасибо миллион.