Работа с несколькими выходными результатами в запросе UPSERT [SQL] - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь выполнить запрос на обновление, в котором обновляется одна строка таблицы и, если ничего не найдено и не обновлено, вставляется новая строка. В каждом случае мне нужен запрос, чтобы вернуть идентификатор вставленной строки.

Проблема, с которой я столкнулся, заключается в том, что этот запрос возвращает 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 в таблицу и вернуть их, или обернуть все это в выборку, но, надеюсь, есть что-то более элегантное.

Спасибо миллион.

1 Ответ

0 голосов
/ 22 января 2020

Чувствую себя довольно глупо. Я просто добавил

IF EXISTS(SELECT * FROM Rights WHERE principal = :principal and [function] = :function)
    UPDATE ...
ELSE
    INSERT ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...