Я пишу на C++ в отношении базы данных SQL Server. У меня есть объект с именем SQLTransaction
, который, созданный в начале кода, отправляет «начать транзакцию» на SQL Server.Запрос ROLLBACK TRANSACTION не имеет соответствующей BEGIN TRANSACTION после ошибки SQL Server 8114
Затем я отправляю на сервер одно или несколько операторов SQL. Если все пойдет хорошо, я установил флаг в объекте SQLTransaction
, чтобы он знал, что набор команд прошел хорошо. Когда объект SQLTransaction
затем выходит из области видимости, он либо отправляет транзакцию фиксации, либо транзакцию отката на сервер в зависимости от состояния флага.
Это выглядит примерно так:
{
TSQLTransaction SQLTran();
try
{
Send(SomeSQLCommand);
}
catch(EMSError &e)
{
InformOperator();
return;
}
SQLTran.commit();
}
Я имел SQL заявление, в одном из этих блоков, который послал бедную команду и эта команда бросила ошибку SQL 8114
Ошибка типа преобразования данных varchar to numeric
С тех пор я исправил эту конкретную проблему. Я не понимаю, что я также получил вторую ошибку SQL с сообщением
Запрос ROLLBACK TRANSACTION не имеет соответствующей BEGIN TRANSACTION.
Я не могу найти ничего, что говорит мне, что эта сделка может или не должна откатываться после сбоя.
Этот точно такой же объект SQLTransaction
используется во многих местах моего приложения и всегда работал нормально. По некоторым причинам эта ошибка SQL обрабатывается по-разному. Существуют ли некоторые ошибки, которые SQL Server автоматически откатывает? Мне бы очень хотелось понять, что здесь происходит.
Благодаря
Почему вы не можете поместить транзакционную логику в инструкцию SQL? –