01/10/2018, 16:53

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 đỡ ạ

Trương Tấn Phát viết 19:04 ngày 01/10/2018

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.

Nguyễn Hoàn viết 19:06 ngày 01/10/2018

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

Trương Tấn Phát viết 19:08 ngày 01/10/2018

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

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.

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.

Nguyễn Hoàn viết 18:55 ngày 01/10/2018

Vâng em cảm ơn anh ạ

Nguyễn Hoàn viết 19:05 ngày 01/10/2018

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
Bài liên quan
0