Есть ли лучший способ: обновить ту же строку в транзакции - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть хранимая процедура, которая пропускает входные данные через серию проверочных запросов и выдает параметр, детализирующий, будет ли запись сохранена с «полной» или «неполной» информацией. Затем мы запускаем транзакцию, сохраняем данные в пару таблиц, фиксируем. Готово. По сути это:

EXEC dbo.ValidationProcedure --(sets output params)
BEGIN TRANSACTION
MERGE TABLE A (uses output params)
MERGE TABLE B
COMMIT TRANSACTION

В дополнение к этому у нас есть представление с такими же проверочными запросами, написанными так, что оно возвращает все вхождения недействительных данных в наших таблицах; запросы в версии процедуры просто проверяют предоставленные входные данные (как процедуру проверки, так и просмотр данных для таблиц A и B). Это представление возвращает точный код ошибки, сообщение, recordID и т. Д., И мы используем его для проверки запросов, чтобы получать сообщения об ошибках при отображении формы ввода, yada yada yada ....

Моя проблема в том, что у нас в разных местах одна и та же логика, которую я ненавижу. Мой вопрос, и возможное решение этого, было бы плохой практикой / плохим дизайном, убрать процедуру валидации все вместе и сделать следующее:

BEGIN TRANSACTION
MERGE TABLE A
MERGE TABLE B
IF EXISTS (SELECT * FROM ValidationView T WHERE T.ID = @ID)
BEGIN
    UPDATE TABLE A SET Incomplete = 1 WHERE [ID] = @ID;
END
COMMIT TRANSACTION

Я думал о том, чтобы сделать это таким образом некоторое время назад, но я не любил затрагивать один и тот же ряд дважды. Это казалось расточительным, ненужным и неправильным путем; Я надеюсь, что ошибаюсь из-за этого мышления. Но теперь у меня возникли вторые мысли, и я хотел бы знать, сможем ли мы выгрузить часть кода, перейдя ко второму примеру, или мы должны продолжать курс и поддерживать как процедуру проверки, так и представление проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...