Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution

    Đề bài: [SQL Server] Trigger xử lý đúng khi chèn nhiều dòng

    Hai bảng diem(id_sv, mon, so_diem) và thong_ke(id_sv, so_mon).

    Hãy tạo trigger trg_dem_mon kiểu AFTER INSERT trên diem: với mỗi sinh viên xuất hiện trong lô dữ liệu vừa chèn, cộng thêm vào thong_ke.so_mon đúng số môn mà sinh viên đó vừa được chèn.

    Lưu ý: trigger trong SQL Server chỉ chạy một lần cho cả lô, không phải mỗi dòng một lần — nên phải gom nhóm bảng inserted trước khi cập nhật.

    Sau đó chèn một lệnh INSERT gồm 4 dòng: (1,N'Toan',8), (1,N'Ly',7), (1,N'Hoa',9), (2,N'Toan',6), rồi in id_sv và so_mon sắp xếp theo id_sv.

    • Định dạng đầu vào:

      Hai bảng đã được tạo sẵn. diem: id_sv INT, mon NVARCHAR(30), so_diem INT. thong_ke: id_sv INT, so_mon INT. Bảng thong_ke luôn có sẵn dòng cho sinh viên 1 và 2.

    • Ràng buộc đầu vào:

      Số dòng ≤1000\le 1000≤1000.

    • Định dạng đầu ra:

      Mỗi dòng gồm id_sv và so_mon, cách nhau bởi TAB.

    Ghi chú:

    Bài làm phải bắt đầu bằng một dòng GO — SQL Server yêu cầu CREATE TRIGGER là lệnh đầu tiên của một batch. Nếu viết UPDATE ... SET so_mon = so_mon + 1 FROM inserted thì sinh viên 1 chỉ được cộng 1 thay vì 3 — đó chính là lỗi bài này muốn bạn tránh.

    Ví dụ:

    Đầu vào:

    CREATE TABLE diem(id_sv INT, mon NVARCHAR(30), so_diem INT);
    CREATE TABLE thong_ke(id_sv INT, so_mon INT);
    INSERT INTO thong_ke(id_sv,so_mon) VALUES (1,0),(2,0);

    Đầu ra:

    1	3
    2	1

    Chủ đề

    🗄️ Cơ sở dữ liệuSQL ServerSQL Server: TriggerTất cả môn học

    Đang tải editor...