Saya punya 2 perintah dan perlu keduanya dieksekusi dengan benar atau tidak ada yang dieksekusi. Jadi saya pikir saya perlu transaksi, tetapi saya tidak tahu bagaimana menggunakannya dengan benar.
Apa masalah dengan skrip berikut?
BEGIN TRANSACTION [Tran1]
INSERT INTO [Test].[dbo].[T1]
([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)
UPDATE [Test].[dbo].[T1]
SET [Title] = N'az2' ,[AVG] = 1
WHERE [dbo].[T1].[Title] = N'az'
COMMIT TRANSACTION [Tran1]
GO
The INSERT
perintah dijalankan, tetapi UPDATE
perintah memiliki masalah.
Bagaimana saya bisa menerapkan ini untuk mengembalikan kedua perintah jika salah satu dari mereka memiliki kesalahan dalam eksekusi?
sql
sql-server
database
tsql
transactions
Saeid
sumber
sumber
BEGIN TRANSACTION [Tran1]
seharusnya ditempatkan di dalamTRY
? Pokoknya - sepotong kode yang sangat sederhana dan elegan.Pada awal prosedur tersimpan, seseorang harus menempatkan SET XACT_ABORT ON untuk menginstruksikan Sql Server untuk secara otomatis mengembalikan transaksi jika terjadi kesalahan. Jika ommited atau diatur ke OFF, seseorang perlu menguji @@ ERROR setelah setiap pernyataan atau menggunakan ... COCH blok rollback .
sumber
XACT_ABORT
Pendekatan mudah:
sumber