Học SQL Server - Bài 46. Triggers trong SQL Server

Поділитися
Вставка
  • Опубліковано 2 гру 2024

КОМЕНТАРІ • 28

  • @2002_ltt
    @2002_ltt 11 місяців тому +4

    Em chào thầy ạ, em có làm phần ví dụ cuối của thầy theo cách này và có tác dụng và khá dễ hiểu ạ
    -- Viet trigger moi khi co mot chi tiet don hang duoc them vao, so luong ton kho phai giam di
    create trigger UpdateProductInventory
    on [dbo].[Order Details]
    after insert
    as
    begin
    update Products
    set UnitsInStock = UnitsInStock - i.Quantity
    from inserted i
    where Products.ProductID = i.ProductID
    end
    insert into [dbo].[Order Details](OrderID, ProductID, UnitPrice, Quantity)
    values(10248, 77, 13.00, 10)

  • @lejuan9002
    @lejuan9002 29 днів тому

    Thật sự là cảm ơn kênh của anh rất nhiều. Chỉ cần xem vid của anh rồi làm thêm bài tập trên lớp là em đi thi SQL như ăn bánh luôn. Quá chất lượng

  • @thanhhuynguyen7551
    @thanhhuynguyen7551 Рік тому +1

    Em cảm ơn thầy về bài giảng!
    Em gửi BT1 ạ!
    --BT1: viết Trigger khi insert hay Update tự cập nhật ngày giờ thay đổi
    ALTER TABLE dbo.Products
    ADD LastModified DateTime
    --Viết Trigger
    CREATE TRIGGER tg_UpdateLastModifiedWhenChangeProduct
    ON dbo.Products
    AFTER INSERT, UPDATE
    AS
    BEGIN
    UPDATE dbo.Products SET LastModified = GETDATE()
    FROM dbo.Products p
    INNER JOIN Inserted i
    ON i.ProductID = p.ProductID
    END

  • @tprunuspersicav8839
    @tprunuspersicav8839 11 місяців тому +2

    bài cập nhật số lượng tồn kho em có cách dễ hiểu hơn ạ .
    create trigger tudongcapnhatsoluongtonkhohanghoa
    on [dbo].[Order Details]
    after insert
    as
    begin
    update [Products]
    set [Products].[UnitsInStock] = [Products].[UnitsInStock] - i.Quantity
    from inserted i ,[Order Details] od
    where i.ProductID = [Products].ProductID and [Products].[UnitsInStock] >= i.Quantity

    end
    insert into [dbo].[Order Details]
    values (10248,4, 700,999,0)
    select * from Products

  • @huyentran-gk5qr
    @huyentran-gk5qr Місяць тому

    thầy ơi, em search thì thấy FOR và AFTER đều là trigger đc kích hoạt SAU 1 sự kiện ấy thầy? em nghĩ đó là lý do tại sao bài discount khi thầy update discount=5 thì nó vẫn 1 row affected ấy thầy. còn BEFORE mới là trigger ktra trước khi 1 hành động xảy ra.
    ko biết theo em tìm hiểu đc như vậy có đúng ko thầy ?

  • @HuyHoang-kz2lu
    @HuyHoang-kz2lu 6 місяців тому

    Phút 26:37 e nghĩ cái chỗ IF EXIST ... WHERE phải là i.Discontinued < 0 vì mình đang check với cái hàng update.

  • @thanhhuynguyen7551
    @thanhhuynguyen7551 Рік тому +2

    Em cảm ơn thầy về bài giảng!
    Em gửi BT2 ạ!
    --BT2
    CREATE TRIGGER InteadOfDeleteCustomer
    ON dbo.Customers
    INSTEAD OF DELETE
    AS
    BEGIN
    SET NOCOUNT ON
    IF EXISTS (SELECT 1 FROM Deleted d INNER JOIN dbo.Orders o ON o.CustomerID = d.CustomerID)
    BEGIN
    RAISERROR(N'Không thể xóa khách hàng có đơn hàng liên quan.',16, 1)
    END
    ELSE
    BEGIN
    --Nếu k có đơn hàng liên quan thì thực hiện xóa khách hàng
    DELETE FROM dbo.Customers WHERE CustomerID IN(SELECT CustomerID FROM Deleted)
    END
    END

  • @14.trinhongkhanh88
    @14.trinhongkhanh88 Рік тому

    Tuyệt vời anh ơi🤣

  • @LinhVũNguyễnDuy
    @LinhVũNguyễnDuy Рік тому

    mình có cần lập bảng tầm ảnh hưởng trước khi tạo trigger không ạ

  • @inhtruongvu7618
    @inhtruongvu7618 11 місяців тому

    em cảm ơn ạ

  • @HoangAnh-es4kn
    @HoangAnh-es4kn Рік тому

    Cảm ơn a❤

  • @atphan1824
    @atphan1824 6 місяців тому

    cảm ơn a

  • @LinhVũNguyễnDuy
    @LinhVũNguyễnDuy Рік тому

    thêm video về Trigger đi anh

  • @thanhhuynguyen7551
    @thanhhuynguyen7551 Рік тому +2

    Em cảm ơn thầy về bài giảng!
    Em gửi BT3 ạ!
    CREATE TRIGGER BanInsertOrderThanInStock
    ON dbo.[Order Details]
    FOR INSERT
    AS
    BEGIN
    SET NOCOUNT ON;
    IF EXISTS (
    SELECT 1
    FROM Inserted i
    INNER JOIN dbo.[Order Details] od ON od.OrderID = i.OrderID
    INNER JOIN dbo.Products p ON p.ProductID = od.ProductID
    WHERE p.UnitsInStock < od.Quantity
    )
    BEGIN
    ROLLBACK;
    RAISERROR(N'Số lượng đặt hàng lớn hơn số lượng trong kho.', 16, 1);
    END
    END;

  • @manhhoa3711
    @manhhoa3711 10 місяців тому

    Thầy ơi, e có lên github nhưng mà không có đáp án của 3 bài BTVN ạ

    • @tuongpham986
      @tuongpham986 6 місяців тому

      bài tập về nhà là tự giải á bạn. thầy chỉ up bài giảng thui