Em có csdl như hình. Anh chị xem giúp em trigger . Nó bị lỗi ở câu lệnh IF cuối cùng.
_ Nếu em để câu lệnh IF đó thì nó chỉ insert được 1 bản ghi vào bảng tbl_ChiTietKho, các bản ghi tiếp theo nó ko insert đc. Trong khi nếu update thì nó vẫn update được hết các bản ghi.
_ Nếu em xóa câu lệnh IF đó và phần Update phía trên thì nó thực hiện insert đc hết các bản ghi, nhưng mà bỏ đi thì ko phân biệt đc khóa đó đã tồn tại hay chưa để update hoặc insert.
Mong mọi người giúp em sửa lỗi này. Em cảm ơn !
CREATE TRIGGER [dbo].[trg_SoLuongTonKho]
ON [dbo].[tbl_ChiTietNhapKho]
FOR INSERT
AS
BEGIN
declare @MaKho int
Select top 1 @MaKho=MaKho from tbl_NhapKho ORDER BY MaPhieuNhap desc; -- lay' ma kho cuoi' cung` vua` dc them vao` bang tbl_NhapKho
declare @MaSanPham varchar(20)
declare @SoLuongNhap int
SET NOCOUNT ON;
Declare MyCursor CURSOR FOR
Select MaSanPham, SoLuongNhap from inserted;
OPEN MyCursor;
FETCH NEXT FROM MyCursor
INTO @MaSanPham, @SoLuongNhap;
WHILE @@FETCH_STATUS = 0
Begin
-- neu' ton tai khoa' thi thuc hien update SoLuongTon:
IF exists (select MaKho, MaSanPham from tbl_ChiTietKho)
Begin
Update tbl_ChiTietKho Set SoLuongTon = SoLuongTon + @SoLuongNhap
Where MaKho = @MaKho and MaSanPham = @MaSanPham
End
-- neu' ko ton tai khoa' thi thuc hien insert:
IF not exists (select MaKho, MaSanPham from tbl_ChiTietKho) -- bi sai o cau lenh IF nay`, no' chi insert dc 1 ban ghi, cac' ban ghi tiep' theo ko insert dc
-- bo? cau lenh IF nay` di va` phan` update ben^ tren^ thi no' chay dc insert, nhung bo? di thi ko phan biet dc khoa' da ton tai hay chua
-- thay IF nay` bang` ELSE no' cung ko insert het' cac' ban ghi dc
Begin
Insert into tbl_ChiTietKho (MaKho, MaSanPham, SoLuongTon) values (@MaKho, @MaSanPham, @SoLuongNhap)
End
FETCH NEXT FROM MyCursor
INTO @MaSanPham, @SoLuongNhap;
End
CLOSE MyCursor;
DEALLOCATE MyCursor;
END