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

    Đề bài: [SQL Server] Tự sinh lỗi nghiệp vụ bằng THROW

    Bảng donhang(id, so_luong, trang_thai).

    Quy định: không được duyệt đơn hàng có so_luong <= 0.

    Hãy viết đoạn lệnh trong TRY ... CATCH:

    1. Mở transaction, đổi trang_thai của mọi đơn hàng thành N'DA DUYET'.
    2. Nếu tồn tại đơn hàng có so_luong <= 0 thì dùng THROW 50001, 'Don hang khong hop le', 1; để chủ động sinh lỗi.
    3. COMMIT nếu không có lỗi.
    4. Trong CATCH: ROLLBACK nếu còn transaction, rồi in ra số hiệu lỗi bằng ERROR_NUMBER().

    Cuối cùng in id và trang_thai của tất cả đơn hàng sắp xếp theo id.

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

      Bảng donhang đã được tạo sẵn. Cột: id INT, so_luong INT, trang_thai NVARCHAR(20).

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

      Số đơn hàng ≤1000\le 1000≤1000.

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

      Nếu có đơn không hợp lệ: dòng đầu là 50001, sau một dòng trống là danh sách id và trang_thai giữ nguyên. Nếu mọi đơn đều hợp lệ: không có dòng lỗi, chỉ có danh sách với trang_thai là DA DUYET.

    Ghi chú:

    THROW <so_hieu>, '<thong_bao>', <trang_thai>; yêu cầu số hiệu lỗi từ 50000 trở lên. ERROR_NUMBER() trong khối CATCH trả về số hiệu đó.

    Ví dụ:

    Đầu vào:

    CREATE TABLE donhang(id INT, so_luong INT, trang_thai NVARCHAR(20));
    INSERT INTO donhang(id,so_luong,trang_thai) VALUES (1,5,N'MOI'),(2,0,N'MOI');

    Đầu ra:

    50001
    
    1	MOI
    2	MOI

    Chủ đề

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

    Đang tải editor...