Christopher Fernandes Ответов: 2

Как обеспечить правильное выполнение нескольких SQL-запросов


У меня есть несколько хранимых процедур sql server, которые имеют несколько инструкций insert, update &delete в каждой из них.

Это приложение является программным обеспечением для управления юридическими делами

Один раз такая процедура вставляет записи в две таблицы и обновляет 4 другие таблицы и удаляет запись из одной таблицы.

Как я могу гарантировать, что все sql-запросы успешно завершены без каких-либо ошибок или откатов?

Любой метод в sql server для проверки целостности данных, как он называется.

Пожалуйста, посоветуйте

Что я уже пробовал:

Я попытался использовать @@ROWCOUNT, чтобы проверить, все ли записи были вставлены в конкретную таблицу

F-ES Sitecore

Конечно, если он не бросает исключение, то он преуспел с ошибками? Если вы хотите убедиться, что он действительно "сделал работу", то @@ROWCOUNT-это традиционный способ сделать это.

2 Ответов

Рейтинг:
0

#realJSOP

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


Рейтинг:
0

MadMyche

Не зная точно вашей потребности, я бы начал с возвращения синапсов событий, которые произошли; вроде того, что вы думали с помощью @@RowCount

Одним из вариантов было бы добавить переменную a (например @TotalRows) и увеличивайте это значение после каждого утверждения

DECLARE @TotalRows INT = 0

-- Existing INSERT statement 1
SET @TotalRows = @TotalRows + @@RowCount

-- Existing INSERT statement 2
SET @TotalRows = @TotalRows + @@RowCount

-- Existing UPDATE statement 1
SET @TotalRows = @TotalRows + @@RowCount

-- Existing UPDATE statement 2
SET @TotalRows = @TotalRows + @@RowCount

-- Existing DELETE statement 1
SET @TotalRows = @TotalRows + @@RowCount

-- Existing DELETE statement 2
SET @TotalRows = @TotalRows + @@RowCount

-- End of your existing code
SELECT TotalRows = @TotalRows

Если вам нужна более подробная информация о результатах, а не просто текущая сумма, вы можете использовать переменную таблицу, чтобы дать построчный набор результатов и заполнить каждый шаг пути
DECLARE @Results TABLE (ndx INT, TableName NVARCHAR(16), CRUD NCHAR(1), Rows INT)

-- Existing INSERT statement 1
INSERT @Results VALUES (1, 'Table1', 'C', @@RowCount)

-- Existing INSERT statement 2
INSERT @Results VALUES (2, 'Table2', 'C', @@RowCount)

-- Existing UPDATE statement 1
INSERT @Results VALUES (3, 'Table3', 'U', @@RowCount)

-- Existing UPDATE statement 2
INSERT @Results VALUES (4, 'Table4', 'U', @@RowCount)

-- Existing DELETE statement 1
INSERT @Results VALUES (5, 'Table5', 'D', @@RowCount)

-- Existing DELETE statement 2
INSERT @Results VALUES (6, 'Table6', 'D', @@RowCount)

-- End of your existing code
SELECT * FROM @Results ORDER BY ndx

Вы также можете пойти дальше с версией @Results, используя предложение OUTPUT для вставки определенных ключей или другой идентифицирующей информации в таблицу
Предложение вывода (Transact-SQL) - SQL Server | Microsoft Docs[^]