Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

„Атомарно“ ли е изпълнението на T-SQL съхранена процедура?

Това е за SQL Server.

Всеки оператор е атомен, но ако искате съхранената процедура да бъде атомна (или всяка последователност от оператори като цяло), трябва изрично да оградите операторите с

НАЧАЛО НА ТРАНЗАКЦИЯ
Изявление ...
Изявление ...
ИЗВЪРШВАНЕ НА ТРАНЗАКЦИЯ

(Обичайно е да се използват съкратено BEGIN TRAN и END TRAN.)

Разбира се, има много начини да изпаднете в проблеми със заключването в зависимост от това какво друго се случва по същото време, така че може да се нуждаете от стратегия за справяне с неуспешни транзакции. (Пълното обсъждане на всички обстоятелства, които могат да доведат до заключвания, без значение как измисляте този конкретен SP, е извън обхвата на въпроса.) Но те все пак ще могат да бъдат подавани повторно поради атомарността. И според моя опит вероятно ще се оправите, без да знаете за обемите на вашите транзакции и другите дейности в базата данни. Извинете ме, че казвам очевидното.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обединяване на стойности на колони в списък, разделен със запетая

  2. СЪЮЗ ВСИЧКИ и НЕ В заедно

  3. Вземете стойност на колона от низ име на колона sql

  4. Добавяне на идентичност към съществуваща колона

  5. Как да ПРОМЕНЯ параметъра на стойността на таблицата