|
Транзакции в 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 |
|
Транзакции в 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 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 09:05 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Rollbac transaction ... |
|||
:
Изменено: 19.04.2023, 09:30 - PaNik
Нравится:
Не нравится:
|
|||
19.04.2023, 09:29 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 11:35 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Работает нормально, после выполнения этого другие процедуры тоже нормально пишут данные в БД. Единственное, не помню точно, сталкивался с этим раньше или нет, думал, что в самой Delphi это не нужно: имена параметров хп начинаются с @. Сначала попробовал без @ вот так (изменил в примере название хп и параметра, типа соглашение о нераспространении :) ): Код: Delphi 1.
Код: Delphi 1.
... |
|||
:
Изменено: 19.04.2023, 15:33 - s62
Нравится:
Не нравится:
|
|||
19.04.2023, 15:32 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Работает нормально, после выполнения этого другие процедуры тоже нормально пишут данные в БД. Единственное, не помню точно, сталкивался с этим раньше или нет, думал, что в самой Delphi это не нужно: имена параметров хп начинаются с @. Сначала попробовал без @ вот так (изменил в примере название хп и параметра, типа соглашение о нераспространении :) ): Код: Delphi 1.
Код: Delphi 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 15:37 |
|
Транзакции в MS SQL Server
|
|
---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|
:
|
|
19.04.2023, 16:12 |
|
Транзакции в MS SQL Server
|
|
---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|
:
|
|
19.04.2023, 16:14 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:16 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:19 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
... На стороне сервера там может быть много вложенных процедур. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:20 |
|
Транзакции в MS SQL Server
|
|
---|---|
#18+
... На стороне сервера там может быть много вложенных процедур. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|
:
|
|
19.04.2023, 16:21 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:22 |
|
Транзакции в MS SQL Server
|
|
---|---|
#18+
... Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. И их разработчиков. Вот им надо запретить. Делать транзакции. ... |
|
:
|
|
19.04.2023, 16:23 |
|
Транзакции в MS SQL Server
#363019
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
Ссылка на вложение 2:
|
|||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
Главное понимать , что нет вложенных транзакций. При таком подходе. В стэке xp не надо использовать Begin transaction Commit transaction Rollbac transaction Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|||||||||||||||||||
:
Нравится:
Не нравится:
|
|||||||||||||||||||
19.04.2023, 16:25 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
... Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры. Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:26 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно. Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:26 |
|
Транзакции в MS SQL Server
|
|
---|---|
#18+
там русским по-белому про @@trancount написано Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат. procerdure <proc_name> <параметры> as begin begin try -- тут объявляем переменные, временные таблицы и т.п. -- тут всякие прочие операции (заполнение/модификация данных во времянках и т.п.) -- ... (возможно еще что-то) -- тут (в конце процедуры) - финальная модификация данных begin tran ... -- модифицируем данные commit tran; end try begin catch if @@trancount > 0 roolback; ... end catch; end; go ... |
|
:
|
|
19.04.2023, 16:31 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
прочитай книжку (можно выборочно) по моей ссылке - хоть и по древней версии - понимание работы сервака организует ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:39 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Ну и что? Знаю такой счётчик. Что это меняеет? Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат. procerdure <proc_name> <паратметры> as begin begin try begin tran ... -- commit tran; end try begin catch if @@trancount > 0 roolback; ... end catch; end; go Везде и всегда копировать этот код На каждой процедуре.? Нет вложенных транзакций. Надо где-то начать и закончить. Или откатить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2023, 16:41 |
|
Транзакции в MS SQL Server
#363037
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
прочитай книжку (можно выборочно) по моей ссылке - хоть и по древней версии - понимание работы сервака организует ... |
||||||||||||||||
:
|
||||||||||||||||
19.04.2023, 16:44 |
|
Транзакции в MS SQL Server
|
|||
---|---|---|---|
#18+
Ну и что? Знаю такой счётчик. Что это меняеет? Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат. procerdure <proc_name> <паратметры> as begin begin try begin tran ... -- commit tran; end try begin catch if @@trancount > 0 roolback; ... end catch; end; go И добротный код везде дублируешь. Дибильный код всегда и везде. Зачем? ... |
|||
:
Изменено: 19.04.2023, 16:51 - Sparrow
Нравится:
Не нравится:
|
|||
19.04.2023, 16:48 |
|
|
start [/forum/topic.php?fid=17&tid=8919]: |
0ms |
get settings: |
23ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
1588ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 1672ms |
0 / 0 |