01/10/2018, 15:26
ROLL BACK khi xảy ra lỗi trong sql server
Cho em hỏi làm thể nào để khi nó lỗi thì nó roolback ngay lập tức. Hiện tại để làm điều đó em phải đặt lệnh kiểm tra lổi ngay sau các câu lệnh thay đổi database. nó hoạt động ổn nhưng nó lập lại như vậy thì dư quá. Em thử đặt nó trước commit thì nó không hoạt động ạ
GO
/****** Object: StoredProcedure [dbo].[InsertTiecCuoiWithHoaDonAndCTMonAnAndCTDichVu] Script Date: 4/17/2018 7:01:44 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[InsertTiecCuoiWithHoaDonAndCTMonAnAndCTDichVu]
@maTiecCuoi varchar(6),
@tenChuRe varchar(50),
@tenCoDau varchar(50),
@sdt varchar(13),
@ngayCuoi date,
@maCa int,
@maSanh varchar(5),
@soBan int,
@soBanDT int,
@tienCoc int,
@ngayDatTiec date,
@maHoaDon varchar(6),
@ngayThanhToan date,
@stringListMaMonAn varchar(max),
@stringListGCMonAn varchar(max),
@stringListDichVu varchar(max),
@stringListSoLuongOfDL varchar(max),
@successed bit output
AS
BEGIN TRAN
INSERT INTO TiecCuoi(MaTiecCuoi, TenChuRe, TenCoDau, SoDienThoai, NgayCuoi, MaCa, MaSanh, SoBan,SoBanDuTru, TienCoc,NgayDatTiec)
VALUES(@maTiecCuoi, @tenChuRe, @tenCoDau, @sdt, @ngayCuoi, @maCa, @maSanh, @soBan, @soBanDT, @tienCoc, @ngayDatTiec)
IF @@ERROR <> 0
BEGIN
SET @successed = 0
IF @@TRANCOUNT > 0
ROLLBACK TRAN
GOTO Error
END
INSERT INTO HoaDon(MaHoaDon,MaTiecCuoi, NgayThanhToan) VALUES (@maHoaDon,@maTiecCuoi,@ngayThanhToan)
IF @@ERROR <> 0
BEGIN
SET @successed = 0
IF @@TRANCOUNT > 0
ROLLBACK TRAN
GOTO Error
END
-- add mon an va dich vu
DECLARE @tbSelectedMA table(id int IDENTITY(1,1), monAn varchar(4), ghiChu varchar(max))
DECLARE @tbSelectedDV table (id int IDENTITY(1,1), dichVu varchar(6), soLuong int)
-- add CT mon an
INSERT INTO @tbSelectedMA(monAn, ghiChu)
(Select tbMa.value,tbGC.value from string_split(@stringListMaMonAn,',') tbMa, string_split(@stringListGCMonAn,',') tbGC where tbMa.id=tbGC.id)
DECLARE @index int =1, @len int = (select COUNT(*) from @tbSelectedMA), @maMonAn varchar(4), @ghiChu varchar(max)
WHILE @index <= @len
BEGIN
select @maMonAn=monAn, @ghiChu=ghiChu from @tbSelectedMA where id=@index
SET @index = @index + 1
INSERT INTO CTMonAn(MaTiecCuoi, MaMonAn, GhiChi) VALUES (@maTiecCuoi, @maMonAn, @ghiChu)
IF @@ERROR <> 0
BEGIN
SET @successed = 0
IF @@TRANCOUNT > 0
ROLLBACK TRAN
GOTO Error
END
END
-- add CT dich vu
INSERT INTO @tbSelectedDV(dichVu, soLuong)
(Select tbDV.value,tbSL.value from string_split(@stringListDichVu,',') tbDV, string_split(@stringListSoLuongOfDL,',') tbSL where tbDV.id=tbSL.id)
SET @index = 1
SET @len = (select COUNT(*) from @tbSelectedDV)
DECLARE @maDichVu varchar(6), @soLuong int
WHILE @index <= @len
BEGIN
select @maDichVu=dichVu, @soLuong=soLuong from @tbSelectedDV where id=@index
SET @index = @index + 1
INSERT INTO CTDichVu(MaTiecCuoi, MaDV, SoLuong) VALUES (@maTiecCuoi, @maDichVu, @soLuong)
IF @@ERROR <> 0
BEGIN
SET @successed = 0
IF @@TRANCOUNT > 0
ROLLBACK TRAN
GOTO Error
END
END
COMMIT TRAN
Error:
Bài liên quan