-1
私はthis questionの私の執筆に関して数日前に尋ねています。BEGIN - COMMIT TRANSACTIONの予期しない、直感的でない動作
私のニーズに合う答えはということでした。私はそれがCOMMIT...
に達すると、それは、すぐに有効になりますBEGIN....COMMIT TRANSACTION
でUPDATE
文を包む場合、私は思った、直感的に
:
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
BEGIN TRANSACTION
EXEC proc_name
COMMIT TRANSACTION
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
が今ここに別のqustionです、 しかし、私は間違っていました。実際には、上記のようにすると、BEGIN...
に達すると更新が行われます。
要約すると:
次のようにアップデートを行う:、IsActive
の値は(手続きが開始する前に更新が発効した)手順proc_name
の実行中に1に設定されている
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
BEGIN TRANSACTION
EXEC proc_name
COMMIT TRANSACTION
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
cuasesを。このような
行う更新:
BEGIN TRANSACTION
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
COMMIT TRANSACTION
EXEC proc_name
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
はproc_name
の実行中には効果がありません。プロシージャの実行中にIsActive
の値は0に設定されます。
なぜこのように機能していますか?その背後にあるメカニズムは何ですか?
だから、両方のコードがまったく同じ効果がありますか?最初のコードは私が想定していた通りに動作しますか? –
このコードは、SQL Serverで試すことができます。私の仕事環境では同じです。それがあなたのものと同じでない場合は、最初にSPのボディを表示することができます。 – gotqn