Можем ли да използваме транзакция в съхранена процедура?
Можем ли да използваме транзакция в съхранена процедура?

Видео: Можем ли да използваме транзакция в съхранена процедура?

Видео: Можем ли да използваме транзакция в съхранена процедура?
Видео: Реальные примеры Spring AOP внутри самого Spring и за его пределами [Путешествие по Spring AOP — Час 2024, Април
Anonim

Ако ние да имат повече от един SQL оператори в изпълнение в съхранена процедура и ние искате да върнете обратно всички промени, извършени от който и да е от SQL операторите, в случай че възникне грешка поради един от SQL операторите, можем да използваме транзакция в съхранена процедура.

Точно така, изпълняват ли се съхранените процедури в транзакция?

Вложени съхранени процедури са изпълнен в транзакция контекста на най-външното съхранена процедура . Това е настройката по подразбиране. Осигурява поведението по подразбиране, описано по-горе. Тоест всички SQL изрази в a запомнената процедура се изпълнява като сингъл транзакция блок.

Освен по-горе, можем ли да използваме commit в процедура? Общо взето, процедури не трябва ангажират . Ако ти ангажират вътре в склад процедура , ограничавате повторното му използване, защото обаждащ се, който иска промените процедура прави да бъде част от по-голяма транзакция не може просто да извика процедура директно.

По отношение на това, можем ли да използваме транзакция в SQL функция?

1 отговор. Ето защо транзакции са ненужни за sql -сървър функции . Вие обаче мога промяна транзакция ниво на изолация, например, можете използване NOLOCK намек за достигане до „четене без ангажимент“ транзакция ниво на изолация и четене на незаети данни от други транзакции.

Можем ли да използваме вложени транзакции в SQL, ако да, тогава как?

SQL Сървърът наистина не поддържа вложени транзакции . Има само един транзакция на време. Този транзакция има основен вложена транзакция брояч, @@TRANCOUNT. Всяко поредно започване транзакция нараства на брояч по един, всеки комит транзакция го намалява с едно.

Препоръчано: