1. Tìm hiểu stored procedure đã tạo sẵn có tên là
dbo.uspGetBillOfMaterials và chạy thử với các giá trị tham số phù hợp.


2. Thực hiện các bước sau để thử lệnh RAISERROR.
a. Kiểm tra hệ thống xem đã có thông báo lỗi nào của người dùng
chưa
b. Thêm 1 thông báo lỗi số 50001, chạy thử lệnh RAISERROR dạng:
RAISERROR (50001, 10, 1, N’Đây là thông báo thử lỗi’)
c. Chạy thử đoạn lệnh sau:
DECLARE @DBID INT;
SET @DBID = DB_ID();
DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();
RAISERROR
(N’The current database ID is:%d, the database name is:
%s.’,
10, — Severity.
1, — State.
@DBID, — First substitution argument.
@DBNAME); — Second substitution argument.
GO

3. Tạo thủ tục KhachHangTT liệt kê khách hàng thân thiết (không thuộc
cửa hàng) của năm. Khách hàng được xem là thân thiết nếu có tổng số
tiền mua trong năm được cho lớn hơn lượng tiền mua hàng bình quân
của tất cả khách hàng.


4. Tạo thủ tục đặt tên là TongThu có tham số vào là mã nhân viên, tham
số đầu ra là tổng trị giá các hóa đơn nhân viên đó bán được. Sử dụng
lệnh RETURN để trả về trạng thái thành công hay thất bại của thủ tục.


5. Tạo thủ tục kiểm tra 1 mã sản phẩm, nếu là phụ kiện (component) thì
hiển thị thông tin chi tiết phụ kiện đó. Nếu là 1 sản phẩm cấp 1 hoặc 2
thì hiển thị danh sách sản phẩm cùng cấp. Sử dụng cursor để in danh
sách sản phẩm.


6. Tạo thủ tục hiển thị tên và số tiền mua của cửa hàng mua nhiều hàng
nhất theo năm đã cho.

[code language=”SQL”] –Cau 1
SELECT * FROM sys.sysmessages
sp_addmessage 50001,16,’Khong the truy xuat’

–Xuat thong bao loi tu thong bao
RAISERROR(50001,16,1,N’Thong bao loi’)

–Xuat thong bao loi truc tiep
RAISERROR(N’Ko the thuc hien phep toan %d + %d’,16,1,5,6)

—Cau 3
CREATE PROCEDURE KhachHangThanThiet
@nam int
AS
BEGIN
SELECT SOH.CustomerID, SUM([TotalDue]) AS ‘Tong tien’ INTO #tam
FROM [Sales].[SalesOrderHeader] SOH
JOIN [Sales].[Customer] C ON C.CustomerID = SOH.CustomerID
WHERE [StoreID] IS NULL AND YEAR([OrderDate]) = @nam
GROUP BY SOH.CustomerID

SELECT * INTO #tam2
FROM #tam
WHERE [Tong tien] IN (SELECT AVG([Tong tien]) FROM #tam)
END

–Gọi và thực hiện thủ tục
EXEC [dbo].[KhachHangThanThiet] 2012

–Cau 3
CREATE PROC tongtienbanhang @macuahang int, @year int
AS
SET NOCOUNT ON
SELECT SUM([TotalDue]) AS ‘Tong Tien’
FROM [Sales].[Store] S
JOIN [Sales].[Customer] C ON S.BusinessEntityID = C.StoreID    
JOIN [Sales].[SalesOrderHeader] SOH ON C.CustomerID = SOH.CustomerID
WHERE s.BusinessEntityID=@macuahang AND YEAR([OrderDate])=@year

–Gọi và thực hiện thủ tục
EXEC [dbo].[tongtienbanhang] 290, 2008

–Cau 4–
CREATE PROC TongThu @maNV INT, @Hoten NVARCHAR(30) OUTPUT, @TongTienBan money output
AS
DECLARE @ERROR INT
SET @TongTienBan =
(
SELECT SUM([TotalDue])
FROM [Sales].[SalesOrderHeader] WHERE [SalesPersonID] = @maNV
)
SELECT @Hoten=[FirstName]+”+[MiddleName]+”+[LastName] FROM [Sales].[SalesPerson] SP
JOIN [Person].[Person] P
ON P.BusinessEntityID = SP.BusinessEntityID
IF (@@ERROR = 0)
RETURN 1
ELSE
RETURN -1

–Testing
DECLARE @kq Money, @ht NVARCHAR(30)
EXEC TongThu 280, @ht OUTPUT, @kq OUTPUT
print ‘Nhan vien: ‘+@ht+’ ||’+ ‘ Da ban:’+ convert(char(20),@kq)
–Cau 5:
CREATE PROC Chitietsp @masp int
AS
DECLARE @loaisp int
SELECT [ProductSubcategoryID] FROM [Production].[Product] WHERE [ProductID] = @masp
IF @loaisp IS NULL
(SELECT [Name],[Color], [Size], [ListPrice] FROM [Production].[Product] WHERE [ProductID] = @masp)
ELSE
BEGIN
DECLARE cs
CURSOR FOR SELECT [Name], [Color], [Size], [ListPrice] FROM [Production].[Product] WHERE [ProductSubcategoryID] = @loaisp
OPEN CURSOR cs
FETCH NEXT cs TO @name, @color, @size, @price
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @name
PRINT @color
PRINT @size
PRINT @price
FETCH NEXT cs INTO @name, @color, @size, @price
END
CLOSE cs
DEALLOCATE cs
EXEC Chitietsp 802
[/code]