Можете ли вы начать транзакцию в одной хранимой процедуре, а затем отбросить ее или зафиксировать вложенной процедуре?Как использовать транзакции по нескольким хранимым процедурам?
ответ
Commit и Откат имеют различные эффекты
- COMMIT декрементах @@ TRANCOUNT
- ROLLBACK толкает его обратно к нулю
Это происходит потому, что SQL Server действительно не поддерживает вложенные транзакции.
Если совершить или откат в вложенной хранимой процедуре (не сделки), то вы будете получать сообщение об ошибке 266 из-за @@ TRANCOUNT рассогласования на старте и записях
Проблема отката может быть решена с помощью SET XACT_ABORT ON, который является «автоматическим откатом» (просто) и подавляет ошибку 266.
Проблема с фиксацией ... вы не можете как таковой. Тем не менее, вы можете контролировать, где это происходит, отметив @@ TRANCOUNT на сохраненной записи proc и совершив только, если ноль.
Для правильной обработки транзакций смотрите мои ответы здесь, пожалуйста: Nested stored procedures containing TRY CATCH ROLLBACK pattern? и Have I to count transactions before rollback one in catch block in T-SQL?
Вы не можете зафиксировать его во вложенной процедуре, но при запуске транзакции будут завершены все вложенные процедуры внутри него. Таким образом, транзакция хороша для всех хранимых процедур, вложенных в транзакцию. В распределенных транзакциях целостность данных даже пересекает границы машины.
http://msdn.microsoft.com/en-us/library/ms188929(v=SQL.90).aspx
Вы должны пары до вашего НАЧАТЬ TRAN и кончает в том же SPROC
Если затем вызвать другую SPROC которая также имеет транзакции, последующее BEGIN TRAN/COMMIT TRAN пар будет увеличиваться и декремент @ @Trancount соответственно.
Сделка совершается на 'последний' COMMIT TRAN (@@ TRANCOUNT = 1)
Однако любой ROLLBACK всегда будет откат транзакции.
MSDN имеет хорошее объяснение.
Да, это возможно. С такими языками программирования, как C#, при передаче соединения и объекта транзакции с помощью команды. если что-либо было застигнуто как ошибочное, чем откат транзакции:
string customerConnection = "Connection";
string query = "insert into temp values ('Data2','data1','data2','data3')";
string query2 = "update tempcst set data = 'Hello data'";
SqlConnection myConnection = new SqlConnection(customerConnection);
myConnection.Open();
SqlTransaction myTrans = myConnection.BeginTransaction();
Try{
int result = executeNonQuery(query, myConnection, myTrans, "");
i = executeNonQuery(query2, myConnection, myTrans, "");
myTrans.Commit();}
catch{
myTrans.Rollback();
myConnection.Close();
}
- 1. Альтернатива хранимым процедурам
- 2. Альтернатива хранимым процедурам в SQLite3
- 3. Достаточно доступ к хранимым процедурам
- 4. Отправка параметров хранимым процедурам vb.net
- 5. Как применить запрос OData к хранимым процедурам
- 6. Доступ к хранимым процедурам MySQL в Ruby
- 7. LINQs Присоединяется к хранимым процедурам Присоединяется
- 8. Руководство для начинающих по хранимым процедурам с MySQL?
- 9. Предоставить пользователям доступ к хранимым процедурам
- 10. Есть ли способ пройти временные таблицы по хранимым процедурам
- 11. Как предоставить пользователю доступ ко всем хранимым процедурам в mysql?
- 12. C# Winforms - как передать параметры хранимым процедурам SQL Server
- 13. Доступ к хранимым процедурам из набора типизированных данных
- 14. Каков наилучший способ доступа к хранимым процедурам в ORM Django
- 15. Передача параметров хранимым процедурам SQL Server с PHP PDO
- 16. Удалить предупреждения при обращении к системным хранимым процедурам в SQLProj
- 17. Доступ к хранимым процедурам с помощью robconery/array?
- 18. Подключение к устаревшим хранимым процедурам и базе данных
- 19. Доступ к хранимым процедурам членства ASP.NET с классической ASP-страницы
- 20. SQL-транзакции по нескольким базам данных
- 21. Применение транзакции по нескольким SQL-запросам
- 22. Можете ли вы использовать Webmatrix.Data для подключения к хранимым процедурам MySql?
- 23. Выполнение транзакции по нескольким операторам в phpMyAdmin
- 24. Поддерживает ли CakePHP транзакции по нескольким моделям?
- 25. Учебное пособие по процедурам JPA
- 26. Как получить доступ к хранимым процедурам или функциям oracle, возвращающим sysrefcursor из отчетов Crystal?
- 27. Доступ к хранимым процедурам Azure SQL в условиях приложения Azure Logic
- 28. Как я могу автоматически добавлять блоки комментариев к хранимым процедурам SQL Server?
- 29. Выполняют ли функции SQL Server 2008, которые возвращают таблицы, оптимизируются подобно хранимым процедурам?
- 30. C# доступ к хранимым процедурам и представлениям базы данных SQL Server