powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать ответы на сообщение: #363002  
12 сообщений из 12, страница 1 из 1
Microsoft SQL Server / Транзакции в MS SQL Server
    #363002
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
s62  19.04.2023, 11:35
[игнорируется]
Sparrow  19.04.2023, 09:05
[игнорируется]
Главное понимать , что нет вложенных транзакций. При таком подходе.

В стэке xp не надо использовать
Begin transaction
Commit transaction
Rollbac transaction
Не совсем понял, что такое стэк хр. Это, если в теле одной хп вызывается другая хп? Да, примерно понятно, что если что-то будет откатываться так, то может наверное поломаться логика транзакций.
Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры.

Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать.
На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363006
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Sparrow  19.04.2023, 16:16
[игнорируется]
s62  19.04.2023, 11:35
[игнорируется]
Sparrow  19.04.2023, 09:05
[игнорируется]
Главное понимать , что нет вложенных транзакций. При таком подходе.

В стэке xp не надо использовать
Begin transaction
Commit transaction
Rollbac transaction
Не совсем понял, что такое стэк хр. Это, если в теле одной хп вызывается другая хп? Да, примерно понятно, что если что-то будет откатываться так, то может наверное поломаться логика транзакций.
Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры.

Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать.
На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
я там чуть выше сцылку привел, почитай там про транзакции
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363008
s62
Скрыть профиль Поместить в игнор-лист
Участник
Sparrow  19.04.2023, 16:16
[игнорируется]
...

На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
Ага, примерно понятно, чтобы был какой-то единый порядок, когда начали транзакцию, когда закончили.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363010
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
s62  19.04.2023, 16:20
[игнорируется]
Sparrow  19.04.2023, 16:16
[игнорируется]
...

На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
Ага, примерно понятно, чтобы был какой-то единый порядок, когда начали транзакцию, когда закончили.
почитай про транзакции в MS SQL Server по моей ссылке выше, там немного чесслово
...
Рейтинг: 1 / 0
Нравится: Гарыныч
Microsoft SQL Server / Транзакции в MS SQL Server
    #363011
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  19.04.2023, 16:19
[игнорируется]
Sparrow  19.04.2023, 16:16
[игнорируется]
s62  19.04.2023, 11:35
[игнорируется]
Sparrow  19.04.2023, 09:05
[игнорируется]
Главное понимать , что нет вложенных транзакций. При таком подходе.

В стэке xp не надо использовать
Begin transaction
Commit transaction
Rollbac transaction
Не совсем понял, что такое стэк хр. Это, если в теле одной хп вызывается другая хп? Да, примерно понятно, что если что-то будет откатываться так, то может наверное поломаться логика транзакций.
Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры.

Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать.
На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
я там чуть выше сцылку привел, почитай там про транзакции
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363013
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Sparrow  19.04.2023, 16:22
[игнорируется]
PaNik  19.04.2023, 16:19
[игнорируется]
Sparrow  19.04.2023, 16:16
[игнорируется]
s62  19.04.2023, 11:35
[игнорируется]
Sparrow  19.04.2023, 09:05
[игнорируется]
...
Не совсем понял, что такое стэк хр. Это, если в теле одной хп вызывается другая хп? Да, примерно понятно, что если что-то будет откатываться так, то может наверное поломаться логика транзакций.
Кстати в субд Firebird в PSQL вообще нельзя использовать управление транзакциями, в смысле start, commit, rollback transaction. Предполагается, что хп выполняется в контексте транзакции, которая стартуется и коммитится или откатывается извне процедуры.

Спасибо за подсказку. Ну, я такое вроде и не собирался делать, теперь тем более буду знать. ) У меня по плану (надо вот сегодня дописать и потестировать), там один запрос и одна ХП выполняются. Ну вот перед этим соответстенно вручную собираюсь стартовать транзакцию, а в конце завершать или откатывать.
На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
я там чуть выше сцылку привел, почитай там про транзакции
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
там русским по-белому про @@trancount написано
...
Рейтинг: 1 / 0
Нравится: Гарыныч
Microsoft SQL Server / Транзакции в MS SQL Server
    #363022
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  19.04.2023, 16:23
[игнорируется]
Sparrow  19.04.2023, 16:22
[игнорируется]
PaNik  19.04.2023, 16:19
[игнорируется]
Sparrow  19.04.2023, 16:16
[игнорируется]
s62  19.04.2023, 11:35
[игнорируется]
...
На стороне сервера там может быть много вложенных процедур.
И их разработчиков. Вот им надо запретить. Делать транзакции.
я там чуть выше сцылку привел, почитай там про транзакции
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
там русским по-белому про @@trancount написано
Ну и что? Знаю такой счётчик. Что это меняеет?

Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363027
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Sparrow  19.04.2023, 16:26
[игнорируется]
PaNik  19.04.2023, 16:23
[игнорируется]
Sparrow  19.04.2023, 16:22
[игнорируется]
PaNik  19.04.2023, 16:19
[игнорируется]
Sparrow  19.04.2023, 16:16
[игнорируется]
...
я там чуть выше сцылку привел, почитай там про транзакции
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
там русским по-белому про @@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:41 - PaNik
Рейтинг: 1 / 0
Нравится: Гарыныч
Microsoft SQL Server / Транзакции в MS SQL Server
    #363032
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  19.04.2023, 16:31
[игнорируется]
Sparrow  19.04.2023, 16:26
[игнорируется]
PaNik  19.04.2023, 16:23
[игнорируется]
Sparrow  19.04.2023, 16:22
[игнорируется]
PaNik  19.04.2023, 16:19
[игнорируется]
...
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
там русским по-белому про @@trancount написано
Ну и что? Знаю такой счётчик. Что это меняеет?

Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат.
всегда писал примерно так (тут совсем пседокод):
procerdure <proc_name>
<паратметры>
as
begin
begin try
begin tran
... --
commit tran;
end try
begin catch
if @@trancount > 0 roolback;
...
end catch;
end;
go
Ну и чего таким подходом добился?
Везде и всегда копировать этот код
На каждой процедуре.?

Нет вложенных транзакций. Надо где-то начать и закончить. Или откатить.
...
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363040
Sparrow
Скрыть профиль Поместить в игнор-лист
Участник
PaNik  19.04.2023, 16:31
[игнорируется]
Sparrow  19.04.2023, 16:26
[игнорируется]
PaNik  19.04.2023, 16:23
[игнорируется]
Sparrow  19.04.2023, 16:22
[игнорируется]
PaNik  19.04.2023, 16:19
[игнорируется]
...
В ms sql нет вложенных транзакций, есть извращённые способы это обойти. Но это не вечно. Не честно.
там русским по-белому про @@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:51 - Sparrow
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363044
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
Sparrow  19.04.2023, 16:48
[игнорируется]
PaNik  19.04.2023, 16:31
[игнорируется]
Sparrow  19.04.2023, 16:26
[игнорируется]
PaNik  19.04.2023, 16:23
[игнорируется]
Sparrow  19.04.2023, 16:22
[игнорируется]
...
там русским по-белому про @@trancount написано
Ну и что? Знаю такой счётчик. Что это меняеет?

Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат.
всегда писал примерно так (тут совсем пседокод):
procerdure <proc_name>
<паратметры>
as
begin
begin try
begin tran
... --
commit tran;
end try
begin catch
if @@trancount > 0 roolback;
...
throw @@error_number, @@error_message, 1;
end catch;
end;
go
Ты так пытаешься всегда и везде проверить что транзакция уже была .
И добротный код везде дублируешь. Дибильный код всегда и везде.
этот код гарантирует, что если 3-ей и т.п. (по глубине вложенности) процедуре возникла ошибка, она будет корректно обработана в стартовой процедуре

P.S. выдел жирным то, что забыл указать изначально
...
Изменено: 19.04.2023, 16:54 - PaNik
Рейтинг: 0 / 0
Microsoft SQL Server / Транзакции в MS SQL Server
    #363050
PaNik
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей]
[не активирован]
[неодобрен]
PaNik  19.04.2023, 16:53
[игнорируется]
Sparrow  19.04.2023, 16:48
[игнорируется]
PaNik  19.04.2023, 16:31
[игнорируется]
Sparrow  19.04.2023, 16:26
[игнорируется]
PaNik  19.04.2023, 16:23
[игнорируется]
...
Ну и что? Знаю такой счётчик. Что это меняеет?

Например каждый раз его проверять? Это. От очень-очень старых версий сибайз осталось. Изврат.
всегда писал примерно так (тут совсем пседокод):
procerdure <proc_name>
<паратметры>
as
begin
begin try
begin tran
... --
commit tran;
end try
begin catch
if @@trancount > 0 roolback;
throw @@error_number, @@error_message, 1;
end catch;
end;
go
Ты так пытаешься всегда и везде проверить что транзакция уже была .
И добротный код везде дублируешь. Дибильный код всегда и везде.
этот код гарантирует, что если 3-ей и т.п. (по глубине вложенности) процедуре возникла ошибка, она будет корректно обработана в стартовой процедуре

P.S. выдел жирным то, что забыл указать изначально
поправел
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Поиск: Искать ответы на сообщение: #363002  
Пользователи онлайн (130): Анонимы (123), Bing Bot 1 мин., Yandex Bot 1 мин., битый 2 мин., NSFuimus 2 мин., Разум вселенной 5 мин., XEugene 6 мин., sergey11 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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