You are on page 1of 2

BÀI KIỂM TRA

Tạo cơ sở dữ liệu có tên KT_<MãSinhViên> (Ví dụ: KT_18T1021001) và cài đặt các bảng dữ
liệu cho cơ sở dữ liệu này theo sơ đồ dưới đây:

Lưu ý:
- Sinh viên tự nhập dữ liệu cho các bảng Employee và Project
- Bài nộp của sinh viên phải bao gồm 03 file (01 file Script bài làm và 02 file cơ sở dữ liệu)

Câu 1: Viết các thủ tục sau đây:


a. proc_Assignment_Insert
@EmployeeId int,
@ProjectId int
@AssignedDate date,
@Message nvarchar(50) output
Có chức năng bổ sung một nhân viên cho dự án. Trong trường hợp đầu vào không hợp lệ, tham số
đầu ra @Message trả về chuỗi thông báo lý do. Trường hợp bổ sung thành công, tham số
@Message trả về chuỗi rỗng.
b. proc_Assignment_Update_FinishedDate
@EmployeeId int,
@ProjectId int
@FinishedDate date

1
Có chức năng cập nhật thời điểm hoàn thành dự án (FinishedDate) của một nhân viên. Yêu cầu:
chỉ cho phép cập nhật nếu @FinishedDate khác NULL và thời điểm hoàn thành phải sau thời
điểm được giao (AssignedDate)
c. proc_Employee_List
@Page int,
@PageSize int,
@RowCount int output,
@PageCount int output
Có chức năng hiển thị danh sách nhân viên dưới dạng phân trang dữ liệu. Trong đó, @Page là trang
cần hiển thị, @PageSize là số dòng dữ liệu được hiển thị trên mỗi trang, tham số đầu ra
@RowCount cho biết tổng số dòng dữ liệu và tham số đầu ra @PageCount cho biết tổng số trang.
d. proc_CountProjectsByYear
@FromYear int,
@ToYear
Có chức năng thống kê số lượng dự án trong mỗi năm từ năm @FromYear đến năm @ToYear. Yêu
cầu kết quả thống kê phải đầy đủ các năm trong khoảng thời gian trên.

Câu 2: Viết các trigger sau đây:


a. trg_Assignment_Insert: có chức năng bắt lệnh INSERT trên bảng Assignment sao
cho mỗi khi bổ sung dữ liệu cho bảng này thì tính lại giá trị của cột CountOfAssigned
trong bảng Project bằng đúng với số lượng nhân viên đã được phân công thực hiện dự án.
b. trg_Assignment_Update_FinishedDate: có chức năng bắt lệnh UPDATE trên bảng
Assignment sao cho khi cập nhật giá trị của cột FinishedDate trong bảng này thì tính
lại giá trị của cột CountOfFinished bằng đúng với số lượng nhân viên đã hoàn thành
thành dự án (lưu ý: một nhân viên sẽ được xem là hoàn thành dự án nếu giá trị trường
FinishedDate là khác NULL).
Lưu ý: Với 2 trigger trên, giả thiết mỗi lần chỉ bổ sung hoặc cập nhật đúng một dòng dữ liệu

Câu 3: Viết các hàm sau đây:


a. func_CountAssignedProjects(@EmployeeId int)
Có chức năng tính tổng số dự án đã được phân công thực hiện cho nhân viên có mã
@EmployeeId.
b. func_GetAssignedProjects(@EmployeeId int)
Trả về một bảng cho biết danh sách tên dự án, thời điểm bắt đầu, thời điểm được phân công và thời
điểm đã hoàn thành của các dự án đã được phân công thực hiện cho nhân viên có mã là
@EmployeeId.

You might also like