SQL Server: как заставить транзакцию завершиться неудачно? - PullRequest
0 голосов
/ 22 мая 2019

Чтобы проверить обработку ошибок в приложении, я ищу способ разрешить фиксацию транзакции в результате ошибки.

Приложение написано на C и использует ODBC для связи с источником данных SQL Server 2017. Приложение запускает транзакцию базы данных и выполняет произвольный SQL (который я могу изменить ради теста). Затем он фиксирует транзакцию (используя ODBC SQLEndTran()). Я хочу построить тест, который проверяет обработку ошибок при фиксации.

Существует ли простой и надежный способ позволить сбою фиксации, например, путем выполнения какого-либо конкретного сценария SQL перед фиксацией или путем изменения базы данных или настроек источника данных?

РЕДАКТИРОВАНИЕ / уточнение: что мне нужно для сбоя, так это сам коммит транзакции (в частности, SQLEndTran() полный вызов с ошибкой). SQL до этого завершится успешно.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Если вы можете правильно рассчитать время в рамках тестирования, вы можете сделать несколько вещей:
1. Завершите сеанс из отдельного соединения в рамках тестирования.
2. Измените конфигурацию брандмауэра, чтобы эмулировать ошибку сети.
3. Переключите базу данных в однопользовательский режим или остановите службу SQL.

0 голосов
/ 22 мая 2019

Самый простой способ - форсировать деление на ноль.

declare @SomeVal int = 0
set @SomeVal = 2 / @SomeVal

- РЕДАКТИРОВАТЬ -

Поскольку я предполагаю, что вы хотите, чтобы фиксация не удалась, вы можете просто добавить откат прямо передкоммит.Тогда исключение будет выдано в операторе фиксации.

...