Xin hướng dẫn xử lý lỗi khi dùng Trigger trong SQL

Xin chào mọi người. Hiện tại em đang học về sử dụng SQL em có bài tập liên quan đến Trigger mà em đang không biết xử lý thế nào cho hợp lý. Mong các cao nhân tìm giải pháp giúp em với ạ
Đây là thiết kế cơ sở dữ liệu của bài:


Yêu cầu: Viết trigger không cho phép xóa các cuốn sách vẫn còn trong kho (số lượng > 0)
Em đã thử viết như sau nhưng không được:

 create Trigger xoa_sach on sach
 	FOR DELETE
 	AS
 	BEGIN
 	  declare @count int 
 	  select @count= count(s.sach_id) from sach as s,kho_sach as k WHERE k.so_luong >0 and  s.sach_id=k.sach_id

 	 if (@count>0)
 	 BEGIN
 	 PRINT 'Không được phép xóa các cuốn sách vẫn còn trong kho (số lượng > 0)'
 	 ROLLBACK TRAN
 	 END
 	 END

Mong mọi người dùng đỡ ạ

Không được là không được là không được gì?
- Xóa không được khi =0?

  • Vẫn xóa khi > 0?

Vấn đề ở đây là mã sách (sach_id) đâu? Lúc xóa thì cần tham số là mã sách thì mới duyệt xem mã sách đó còn hay không.
Như cách chọn của bạn thì bạn đang chọn tất cả mã sách có sl > 0.
=> Chỉ xóa được khi toàn bộ sách trong kho =0.

1 Like

Thế theo anh thì bài này làm thế nào ạ

Làm thế nào thì mình nói rồi:

Bạn có biết đến bảng tạm tên là inserteddeleted không, nó lưu thông tin của dữ liệu vừa xóa được để dùng trong trigger.

1 Like

Vâng em cảm ơn anh ạ

Anh ơi bài này em làm thế này có đúng không ạ

Viết trigger chỉ cho phép xóa một danh mục sách khi không còn cuốn sách nào thuộc chuyên mục này.
create Trigger xoa_loai_sach on loai_sach
FOR DELETE
AS
BEGIN
declare @count int =0
select @count= count(loai_sach_id) from deleted where loai_sach_id in (select loai_sach_id from sach where sach_id in (select sach_id from kho_sach where so_luong>0))

 if (@count>0)
 BEGIN
 PRINT N'không cho phép xóa một danh mục sách khi  còn cuốn sách nào thuộc chuyên mục này'
 ROLLBACK TRAN
 END
 END
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?