| 
 | 
| 
 
Транзакции в 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: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:  | 
    9ms | 
get forum list:  | 
    11ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    37ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    106ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 9ms | 
| total: | 195ms | 

| 0 / 0 | 
