powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #362109  
13 сообщений из 13, страница 1 из 1
Microsoft SQL Server / Транзакции в MS SQL Server
    #362109
s62
Скрыть профиль Поместить в игнор-лист
Участник
Привет,
раньше имел дело с Firebird, где транзакции прописывают (по крайне мере я прописывал :) ) явно. И с MySQL на сайте, где вообще без транзакций было.
Сейчас имею дело с программами, которые работают с MS SQL Server. Насколько я смутно припоминаю, в нем есть что-то насчет неявных транзакций, которые имплицитно (сами, ты этого не делаешь явно) стартуются и заканчиваются. Короче я в коде не вижу ничего про транзакции. И сам что-то делал, менял, как-то ничего про них не делал тоже. Да, программа на Delphi, компоненты для доступа - dbGo (обертка вокруг ADO).
Сейчас мне надо сделать несколько последовательных действий, которые хотелось бы выполнить в одной транзакции, чтобы или выполнить всё или откатить всё. Я вижу у компонента TAdoConnection методы BeginTrans, CommitTrans, RollbackTrans. В принципе понятно, что писать. Но вот такой вопрос, а как это будет взаимодействовать с другими процедурами, которые с неявными (или неявной) транзакциями?
Будет ли всё остальное, то, что работало до этого, работать нормально, если я напишу что-то типа
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Adoconnection.BeginTrans
try
  ...
  ...
  AdoConnection.CommitTrans;
except
  ...
  AdoConnection.RollbackTrans;
  ...
end;
После того, как это выполнится, последующие запросы и вызовы ХП будут ли работать норм?

Понятно, что можно поэкспериментировать, но так, теоретически, кто-нибудь может сказать что-то про это?
...
Изменено: 18.04.2023, 17:33 - s62
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #362125
s62
Скрыть профиль Поместить в игнор-лист
Участник
s62 [игнорируется] 

почитал вот это https://learn.microsoft.com/ru-ru/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-ver16
похоже, что должно работать, что следующий запрос автоматически стартует новую транзакцию.
...
Рейтинг: 2 / 0
Нравится: PaNik, Гарыныч
Microsoft SQL Server / Транзакции в MS SQL Server
    #364280
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
s62  18.04.2023, 17:28
[игнорируется]
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Adoconnection.BeginTrans
try
  ...
  ...
  AdoConnection.CommitTrans;
except
  ...
  AdoConnection.RollbackTrans;
  ...
end;
Открывать и закрывать транзакции на клиенте - дурной тон.
Если надо выполнить несколько операторов, то их надо обернуть в xp.
В самой хп никаких транзакций открывать не надо, так как по умолчанию хп выполняется в контексте одной транзакции
...
Рейтинг: 1 / 0
Нравится: megabyte
Microsoft SQL Server / Транзакции в MS SQL Server
    #364281
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
cat2  20.04.2023, 16:52
[игнорируется]
Открывать и закрывать транзакции на клиенте - дурной тон.
Ох, йо...
Как с вами тяжело...
...
Рейтинг: 1 / 0
Нравится: Ифрит
Microsoft SQL Server / Транзакции в MS SQL Server
    #364287
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
Горбатый ёж  20.04.2023, 16:56
[игнорируется]
cat2  20.04.2023, 16:52
[игнорируется]
Открывать и закрывать транзакции на клиенте - дурной тон.
Ох, йо...
Как с вами тяжело...
Еще один решил потролить? По существу возражения есть? Как радостно открывать транзакции на клиенте?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364296
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
cat2  20.04.2023, 17:04
[игнорируется]
По существу возражения есть?
В одном бизнес процессе нужно выполнить 3 процедуры, в другом бизнес процессе нужно выполнить 2 из тех трёх процедур.
При этом оба процесса могут быть запущены на одном клиенте.
Давай, расскажи где ты будешь стартовать транзакции, если не на клиенте.
Хотя ты наверное скажешь, что не надо стартовать, достаточно зафиксировать изменения.
Только вопрос, насколько ты уверен с том, что в текущей транзакции не были внесены ранее каким либо изменения помимо интересующего бизнес процесса. И ещё как ты будешь обрабатывать ошибки и насколько хорошо будет видно по коду в каком процессе возникает ошибка?
...
Изменено: 20.04.2023, 17:16 - Горбатый ёж
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364368
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
Горбатый ёж  20.04.2023, 17:15
[игнорируется]
cat2  20.04.2023, 17:04
[игнорируется]
По существу возражения есть?
В одном бизнес процессе нужно выполнить 3 процедуры, в другом бизнес процессе нужно выполнить 2 из тех трёх процедур.
При этом оба процесса могут быть запущены на одном клиенте.
Давай, расскажи где ты будешь стартовать транзакции, если не на клиенте.
Хотя ты наверное скажешь, что не надо стартовать, достаточно зафиксировать изменения.
Только вопрос, насколько ты уверен с том, что в текущей транзакции не были внесены ранее каким либо изменения помимо интересующего бизнес процесса. И ещё как ты будешь обрабатывать ошибки и насколько хорошо будет видно по коду в каком процессе возникает ошибка?
Вот напугал.
Создаю три ХП. Потом создаю еще две. В одной вызываются две из трех, в другой - все три
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364426
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
cat2  20.04.2023, 19:13
[игнорируется]
В одной вызываются две из трех, в другой - все три
В чём в одной и другой?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364451
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
Горбатый ёж  20.04.2023, 20:33
[игнорируется]
cat2  20.04.2023, 19:13
[игнорируется]
В одной вызываются две из трех, в другой - все три
В чём в одной и другой?
Допустим, есть три запроса, , каждый из них записываем в ХП.
Получаем XP1, XP2, XP3

Создаем XP4, в нем вызываются XP1, XP2, XP3
Создаем XP5, в нем вызываются XP1, XP2
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364529
Горбатый ёж
Скрыть профиль Поместить в игнор-лист
Участник
cat2  20.04.2023, 21:20
[игнорируется]
Горбатый ёж  20.04.2023, 20:33
[игнорируется]
cat2  20.04.2023, 19:13
[игнорируется]
В одной вызываются две из трех, в другой - все три
В чём в одной и другой?
Допустим, есть три запроса, , каждый из них записываем в ХП.
Получаем XP1, XP2, XP3

Создаем XP4, в нем вызываются XP1, XP2, XP3
Создаем XP5, в нем вызываются XP1, XP2
Феерично.
Код потом такой разбирать просто чудесно.
Но ещё раз вопрос, в чём ты эти процедуры запускать будешь? Уж не в транзакциях ли? А как ты можешь быть уверен, что у тебя в рамках транзакции выполнена только одна и нужная процедура?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #364574
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
cat2  20.04.2023, 16:52
[игнорируется]
В самой хп никаких транзакций открывать не надо, так как по умолчанию хп выполняется в контексте одной транзакции
не путаешь с триггером?
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #365510
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
Неуловимый Джо  20.04.2023, 23:57
[игнорируется]
cat2  20.04.2023, 16:52
[игнорируется]
В самой хп никаких транзакций открывать не надо, так как по умолчанию хп выполняется в контексте одной транзакции
не путаешь с триггером?
Нет
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #365566
cat2
Скрыть профиль Поместить в игнор-лист
Участник
Гесты и игнорируемые идут по CSS
Горбатый ёж  20.04.2023, 22:21
[игнорируется]
cat2  20.04.2023, 21:20
[игнорируется]
Горбатый ёж  20.04.2023, 20:33
[игнорируется]
cat2  20.04.2023, 19:13
[игнорируется]
В одной вызываются две из трех, в другой - все три
В чём в одной и другой?
Допустим, есть три запроса, , каждый из них записываем в ХП.
Получаем XP1, XP2, XP3

Создаем XP4, в нем вызываются XP1, XP2, XP3
Создаем XP5, в нем вызываются XP1, XP2
Феерично.
Код потом такой разбирать просто чудесно.
Но ещё раз вопрос, в чём ты эти процедуры запускать будешь? Уж не в транзакциях ли? А как ты можешь быть уверен, что у тебя в рамках транзакции выполнена только одна и нужная процедура?
Честно не понимаю в чем проблема с разбором.
Ну назови XP4 PizdecAndBliat , а XP5 - PizdecOnly

Я уже писал, что открытие транзакции будут обеспечивать сами хранимые процедуры.
Любая ошибка любого запроса внутри ХП, в том числе и выполнения другой хранимой процедуры, вызывает откат действий всей хранимой процедуры.

То есть в теле хранимой процедуры XP4 конечно можно написать:
Код: SQL
1.
2.
3.
4.
5.
begin tran
execute XP1
execute XP2
execute XP3
commit
Просто begin tran и commit здесь необязательны, так как MS SQL и так обрамляет тело XP этими операторами.
Мы ведь про MS SQL говорим? В других СУБД может быть и не так, я не знаю

...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #362109  
Пользователи онлайн (138): Анонимы (123), Bing Bot, Королева Жезлов, IT-Клоп, битый, Горбатый ёж 1 мин., anonymous 1 мин., Yandex Bot 1 мин., unique 2 мин., Blondin 2 мин., Ветер 3 мин., Tosh 3 мин., Biene Maja 3 мин., паразит 5 мин., Гарыныч 6 мин., serg_tmb 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]