Подтвердить что ты не робот

Транзакция sql/db не возвращается должным образом с ms sql

Поэтому я не могу быть слишком конкретным, но я думаю, что я могу вам сказать, будет достаточно, чтобы понять это. Сначала я использую gorp для настройки и получения транзакции. Я использую драйвер github.com/denisenkom/go-mssqldb.

Затем я выполняю ряд операций, и если из них не удается я rollback, и если все имеют успех я commit. Проблема в том, что он только откатывает утверждение, которое не удалось, а не остальные операции. Я ошибаюсь, что это не так, как это должно работать?

Вот несколько грубого psudocode, чтобы дать вам лучшее представление о том, что я говорю:

trans,err := dbmap.Begin()
//assume all errors are received and checked before continuing
id := trans.Exec("insert thing") //successful, persists after rollback 
thing := trans.Select("Select thing") //successful
trans.Exec("update other_thing with thing") //successful, persists after rollback
newthing := trans.Exec("insert new_thing with thing") //fails, rollsback
if err != nil{
   trans.Rollback() //No errors
   return
}
trans.Commit()

Я ошибаюсь, что должно rollback все, начиная с dbmap.Begin()? Это ошибка в реализации драйвера? Любая помощь приветствуется. Спасибо!

Обновление

Протестировано https://play.golang.org/p/0L3Vgk8C_F, и это сработало, поэтому я предполагаю, что это означает, что это связано с gorp. Я использую ветвь v1, так как это скоро будет производство, и поэтому стабильность является ключевой. Я буду разбирать его, но похоже, что он просто слегка обертывает его.

4b9b3361

Ответ 1

Убедитесь, что автокоммит включен. Многие инструменты командной строки, uis и даже драйверы позволяют по умолчанию использовать

Ответ 2

В соответствии с этим (я прочитал всего несколько строк) https://technet.microsoft.com/en-us/library/ms187878(v=sql.105).aspx

autocommit, по-видимому, отключен, это приводит меня к выводу, что если автор go-mssqldb не реализовал включение/выключение для этой функции, то он включен.

Вы можете переключить его самостоятельно, просто выполните поиск SET IMPLICIT_TRANSACTIONS