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

    Đề bài: [SQL Server] Huỷ một phần đơn hàng bằng savepoint

    Hai bảng kho(id_sp, ton) và nhatky(noidung NVARCHAR(100)).

    Một đơn hàng gồm hai mặt hàng. Trong một transaction, hãy xử lý lần lượt:

    1. Trừ 5 khỏi tồn kho sản phẩm id_sp = 1.
    2. Ghi vào nhatky dòng Da tru SP1.
    3. Đặt savepoint sp_truoc_sp2.
    4. Trừ 5 khỏi tồn kho sản phẩm id_sp = 2.
    5. Nếu tồn kho của sản phẩm 2 trở nên âm thì ROLLBACK về sp_truoc_sp2 và ghi vào nhatky dòng Huy SP2; ngược lại ghi Da tru SP2.
    6. COMMIT.

    Sau đó in id_sp và ton của kho (sắp xếp theo id_sp).

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

      Hai bảng đã được tạo sẵn. kho: id_sp INT, ton INT. nhatky: noidung NVARCHAR(100). Kho luôn có id_sp = 1 và id_sp = 2, và sản phẩm 1 luôn đủ tồn.

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

      Số sản phẩm ≤1000\le 1000≤1000.

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

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

    Ghi chú:

    ROLLBACK TRANSACTION <savepoint> chỉ huỷ những thay đổi sau savepoint đó; những gì làm trước vẫn được giữ và sẽ được COMMIT.

    Ví dụ:

    Đầu vào:

    CREATE TABLE kho(id_sp INT, ton INT);
    CREATE TABLE nhatky(noidung NVARCHAR(100));
    INSERT INTO kho(id_sp,ton) VALUES (1,10),(2,3);

    Đầu ra:

    1	5
    2	3

    Chủ đề

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

    Đang tải editor...