|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Привет, раньше имел дело с Firebird, где транзакции прописывают (по крайне мере я прописывал :) ) явно. И с MySQL на сайте, где вообще без транзакций было. Сейчас имею дело с программами, которые работают с MS SQL Server. Насколько я смутно припоминаю, в нем есть что-то насчет неявных транзакций, которые имплицитно (сами, ты этого не делаешь явно) стартуются и заканчиваются. Короче я в коде не вижу ничего про транзакции. И сам что-то делал, менял, как-то ничего про них не делал тоже. Да, программа на Delphi, компоненты для доступа - dbGo (обертка вокруг ADO). Сейчас мне надо сделать несколько последовательных действий, которые хотелось бы выполнить в одной транзакции, чтобы или выполнить всё или откатить всё. Я вижу у компонента TAdoConnection методы BeginTrans, CommitTrans, RollbackTrans. В принципе понятно, что писать. Но вот такой вопрос, а как это будет взаимодействовать с другими процедурами, которые с неявными (или неявной) транзакциями? Будет ли всё остальное, то, что работало до этого, работать нормально, если я напишу что-то типа Код: Delphi 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Понятно, что можно поэкспериментировать, но так, теоретически, кто-нибудь может сказать что-то про это? ... |
|||
:
Изменено: 18.04.2023, 17:33 - s62
Нравится:
Не нравится:
|
|||
18.04.2023, 17:28 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|
---|---|
#18+
s62 [игнорируется] почитал вот это https://learn.microsoft.com/ru-ru/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-ver16 похоже, что должно работать, что следующий запрос автоматически стартует новую транзакцию. ... |
|
:
|
|
18.04.2023, 17:36 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 11:35 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Работает нормально, после выполнения этого другие процедуры тоже нормально пишут данные в БД. Единственное, не помню точно, сталкивался с этим раньше или нет, думал, что в самой Delphi это не нужно: имена параметров хп начинаются с @. Сначала попробовал без @ вот так (изменил в примере название хп и параметра, типа соглашение о нераспространении :) ): Код: Delphi 1.
Код: Delphi 1.
... |
|||
:
Изменено: 19.04.2023, 15:33 - s62
Нравится:
Не нравится:
|
|||
19.04.2023, 15:32 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
... На стороне сервера там может быть много вложенных процедур. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:20 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
#363019
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
Ссылка на вложение 2:
|
|||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|||||||||||||||||||
:
Нравится:
Не нравится:
|
|||||||||||||||||||
19.04.2023, 16:25 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
прочитай книжку (можно выборочно) по моей ссылке - хоть и по древней версии - понимание работы сервака организует ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:39 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры ... |
|||
:
Изменено: 19.04.2023, 18:29 - s62
Нравится:
Не нравится:
|
|||
19.04.2023, 18:27 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|
---|---|
#18+
Парни, всем спасибо, и Панику, и Воробью - за ответы, и Гарынычу за поддержку разговора. Не ругайтесь в этой теме, плз. ... |
|
:
|
|
19.04.2023, 18:27 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
В Firebird все транзакции явные (или я так ошибочно думал до сих пор, но всегда в IBX их стартовал и т.д.) То что ты их стартовал явно, не говорит о том, что там только явные транзакции. В документации Firebird ничего такого нет. Транзакция настраивается и запускается командой set transaction https://www.firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref40/fblangref40-transacs.html Другое дело, что из клиентского приложения мы с БД можем работать через те или иные компоненты доступа к БД. И в этих компонентах тразнакции могут стартоваться автоматически. Но это не особенность Firebird, а особенность компонентов доступа. Ты это имел в виду или что-то другое? Можно наверное отделить в раздел FB. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2023, 11:00 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Горбатый ёж [игнорируется] В консоли транзакция стартует автоматически, но это делает сама консоль, сама утилита. Цитата [игнорируется] In isql, a transaction is begun as soon as the utility is started. The transaction is begun in SNAPSHOT isolation, with a lock resolution set to WAIT. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2023, 13:11 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|
---|---|
#18+
Ссылочку дай, где это написано. По умолчание он выключен Цитата [игнорируется] Если задано значение OFF, каждая из предыдущих инструкций T-SQL ограничена невидимыми инструкциями BEGIN TRANSACTION и COMMIT TRANSACTION. При значении OFF транзакция выполняется в режиме автофиксации. https://learn.microsoft.com/ru-ru/sql/t-sql/statements/set-implicit-transactions-transact-sql?view=sql-server-ver16 То есть select (как и другие инструкции из списка) выполняется в отдельной транзакции. Перед ним невидимый BEGIN TRANSACTION, после него - невидимый COMMIT TRANSACTION. ... |
|
:
|
|
21.04.2023, 19:14 |
|
Microsoft SQL Server / Транзакции в MS SQL Server
|
|
---|---|
#18+
s62 [игнорируется] Спорить с котом о том что 2 * 2 = 4 надоело ) Просто учитывай в работе, что если тебе надо транзакцию в процедуре, то придется делать begin tran ... commit. Операторы в процедуре НЕ выполняются в одной транзакции, проверяется элементарным экспериментом. Ну и стандартные советы, постарайся делать транзакции короткими, не надо всю процедуру оборачивать. Код: Delphi 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|
:
|
|
21.04.2023, 19:47 |
|
|
Start [/forum/search.php?do_search=1&tid=8919&author_mode=wrote_post&author=s62&start_from=363008]: |
0ms |
get settings: |
1ms |
get forum list: |
5ms |
searching: |
10ms |
get settings: |
1ms |
get forum list: |
5ms |
get topic data: |
2ms |
check forum access: |
0ms |
check topic access: |
0ms |
get forum data: |
1ms |
get found posts: |
38ms |
track hit: |
24ms |
get online users: |
55ms |
check new: |
215ms |
others: | 340ms |
total: | 697ms |
0 / 0 |