Tải bản đầy đủ (.pdf) (26 trang)

Bài tập tổng hợp SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (415.72 KB, 26 trang )

SQL Server 2000
1/26
BÀI TẬP 1
1. Khởi động SQL Server Service Manager
- Start, Program File, MicroSoft SQL Server, Service Manager


- Thực hiện Start, Pause, Stop các Sevice của một Server trên máy hiện hành.
 Server: Chọn tên Server có service cần chạy. Nếu máy hiện hành là Server thì
có thể gõ vào dấu chấm (.) hoặc chữ Local.
 Services: Chọn tên Service cần chạy.
 Chọn Star/Countinue: Khởi động chạy
Pause: Tạm dừng Sevice
Stop: Ngưng Service

- Bạn hãy cho khởi động dịch vụ SQL Server, SQL Server Agent.
- Đóng hộp thoại SQL Server Service Manager.
-
Quan sát góc phải trên thanh task bar có biểu tượng không?

2. Khởi động Enterprise Manager
- Start, Program File, MicroSoft SQL Server, Enterprise Manager
- Lần lượt mở các nhánh của cây MicroSoft SQL Servers.
- Tìm hiểu sơ lược cửa sổ, thực đơn, thanh công cụ.

SQL Server 2000
2/26



3. Tại Enterprise Manager, thực hiện:


- Quan sát các thành phần đối tượng trên cửa sổ và hãy cho biết:
 Có bao nhiêu SQL Server Group, mỗi Server tên là gì? Đang connect hay
disconnect?


 Liêt kê các thành phần trong Server hiện hành


 Trong server hiện hành, có các Database nào?

(Hãy so sánh tên của các database với các database của máy bên cạnh)
 Trong mỗi Database có những đối tượng nào?


(Các database khác nhau thì các đối tượng có khác nhau không?)
- Mở database Master, khảo sát các đối tượng:
 Vào
đối tượng Table, tìm hiểu cấu trúc và dữ liệu của bảng (lưu ý: chỉ được chọn
xem không nên xoá hay sửa dữ liệu): Sysdatabases, SysObjects, systypes,
syslogins, sysusers, sysmessages, syspermissions…
 Vào đối tượng Stored Procedures, tìm hiểu nội dung của các thủ tục sau (lưu ý:
chỉ được chọn xem không nên xoá hay sửa): sp_help, sp_helpdb, sp_helpcontraint,
sp_rename, sp_renamedb, sp_table, sp_addlogin, sp_addmessage, sp_addrole …
 Lần lượt vào đối tượng còn lại User, Role, …
- Mở database NorthWind, khảo sát các đối tượng:
 Cho biết trong các bảng trong CSDL Master được liệt kê ở trên, bảng nào có trong
NorthWind?
SQL Server 2000
3/26
 Trong stored procedures có các thủ tục liệt kê ở trên hay không?

 Tìm hiểu cấu trúc và dữ liệu của các bảng: Customers, Orders, Order Detail,
Products, Suppliers, Region, Shippers,… Hãy cho biết mối quan hệ giữa các bảng
này (đưa ra mô hình quan hệ)
 Tạo một diagram giữa các bảng trên. (Hướng dẫn: Nhấp nút phải chuột tại
diagrams của CSDL NorthWind, chọn New database diagram, hoàn tất các hộp
thoại Create database diagrams wizard.
- Tương tự khảo sát các đối tượng trong CSDL Pubs
4. Khởi động Books online. Lần lượt tìm hi
ểu các lệnh Create DataBase, Create Table,
Alter Table, Select Statement, Select into, Update Statement, Insert Statement,
DataType, Triggers… (Hướng dẫn: Gõ tên lệnh/từ khóa cần tìm và nhấn Enter)
5. Khởi động Query Analayzer
- Start, Program File, MicroSoft SQL Server, Query Analyzer. Xuất hiện hộp thoại
kết nối.



- Khai báo thông tin kết nối:
 SQL Server: <chọn tên Server cần kết nối>
 Connect using: Chọn chế độ chứng thực Windows authentication/SQl Server
authentication. Nếu là SQL Server authentication phải chỉ định tên đăng nhập
và mã đăng nhập (mặc định sa)
- Chọn OK. Nếu kết nối thành công thì cửa sổ Query Analayzer xuất hiện

SQL Server 2000
4/26


6. Tại Query Analyzer, quan sát các thành phần đối tượng trong cửa sổ:
- Có bao nhiêu CSDL

- Trong CSDL Master và NorthWind, khảo sát các đối tượng và so sánh có tương tự
như trong Enterprise Manager hay không?
- Tìm hiểu các chức năng trong thanh thực đơn, thử bật tắt cửa sổ Object Brower, cửa
sổ Result.
- Tìm hiểu các lựa chọn trong hộp thoại Tool, Options.
- Chọn File, Disconnect. Sau đó File, Connect lại.

7. Trong cửa sổ editor của Query Analyzer, gõ lần lược các câu l
ệnh, cho thực hiện
(đánh dấu chọn, nhấn F5) và quan sát kết quả.
USE NorthWind
SELECT * FROM Employees
SELECT * FROM Customers
SELECT * FROM Customers WHERE companyName LIKE 'W%'
Sp_helpDB
Sp_help Orders
Sp_helpconstraints [Order Details]
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
SELECT * FROM INFORMATION_SCHEMA.TABLES
SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
Object Brower
cửa sổ Editor
Cửa sổ Result
SQL Server 2000
5/26
8. Tiếp tục thực hiện
- Đánh dấu chọn câu lệnh sp_helpDB, nhấn Shift_F1.
- Lưu các câu lệnh đang gõ vào tập tin có tên là Truyvan.SQL, trong thư mục tùy ý.
- Disconnect và sau đó Connect lại
- Mở lại tập tin Truyvan.SQL.

- Cho thực hiện lại từng câu lệnh.

BÀI TẬP 2:
Chọn CSDL hiện hành là NorthWind, dùng câu lệnh Select … From … Where … để truy vấn
dữ liệu như sau, với cấu trúc của các bảng như sau:
Products(ProductID
,ProductName, SupplierID, UnitPrice, UnitInStock, … )
Customers(CustomerID
, CompanyName, Address, City, Region, Country, …)
Employees(EmployeeID
, LastName, FirstName, BirthDate, City, …)
Orders(OderID
, CustomerID, EmployeeID, OrderDate,…)
Order Details(OrderID, ProductID, UnitPrice, Quantity, Discount)

1. Danh sách các customers. Thông tin bao gồm CustomerID, CompanyName, City,
Phone.
2. Danh sách các products. Thông tin bao gồm ProductId, ProductName, UnitPrice.
3. Danh sách các employees. Thông tin bao gồm EmployeeId, EmployeeName, Phone,
Age. Trong đó EmployeeName được ghép từ LastName và FirstName; Age là tuổi
được tính từ năm hiện hành (GetDate()) và năm của Birthdate.
4. Cho xem danh sách employees có năm sinh <=1960.
5. Danh sách các products có từ ‘Boxes’ trong cột QuantityPerUnit.
6. Danh sách các products có Unitprice lớn hớn 10 và nhỏ hơn 15.
7. Danh sách các orders có OrderDate được lập trong tháng 9 năm 1996.
8. Danh sách các products ứng với tiền tồn vốn. Thông tin bao gồm ProductId,
ProductName, Unitprice, UnitsInStock, TotalAccount. Trong đó TotalAccount=
UnitsInStock * Unitprice.
9. Danh sách các customers có city là Paris.
10. Danh sách 5 customers có city bắt đầ

u ‘M’.
11. Danh sách 2 employees có tuổi lớn nhất. Thông tin bao gồm EmployeeID,
EmployeeName, Age. Trong đó, EmployeeName được ghép từ LastName và
FirstName; Age là năm hiện hành từ cho năm sinh.
12. Danh sách các products đã từng có khách hàng đặt hàng (tức là ProductId có trong
Order Details). Thông tin bao gồm ProductId, ProductName, Unitprice.
13. Danh sách các orders ứng với tổng tiền của từng hóa đơn. Thông tin bao gồm
OrdersId, OrderDate, TotalAccount. Trong đó TotalAccount là Sum của Quantity *
Unitprice, kết nhóm theo OrderId.
14. Danh sách các orders ứng với tổng tiền của từng hóa đơn có Shipcity là ‘Madrid’.
Thông tin bao gồm OrdersId, OrderDate, TotalAccount. Trong đó TotalAccount là
Sum của Quantity * Unitprice, kết nhóm theo OrderId.
15. Danh sách các products có tổng s
ố lượng lập hóa đơn lớn nhất.
SQL Server 2000
6/26
16. Cho biết mỗi customers đã lập bao nhiêu lượt hóa đơn bao. Thông tin gồm
CustomerID, CompanyName, CountOfOrder. Trong đó CountOfOrder (tổng số hóa
đơn) được đếm (Count) theo từng Customers.
17. Cho biết mỗi Employee đã lập được bao nhiêu hóa đơn, ứng với tổng tiền.
18. Cho biết những Customers chưa từng lập hóa đơn.

BÀI TẬP 3:
1. Ở tại cửa sổ Enterprise Manager, thực hiện:
a. Dùng Enterprise manager hoặc Database Wizard tạo CSDL GhiDanh có tham số
như sau:
Tham s
ố Giá trị
Database name GhiDanh
Tên logic của data file chính GhiDanh_data

Tên tập tin và đường dẫn của data file chính D:\GhiDanh\GhiDanh_Data.mdf
Kích cở khởi tạo của CSDL 20 MB
Kích cở tối đa của CSDL 40 MB
Gia số gia tăng tập tin CSDL 1 MB
Tên logic của transaction log GhiDanh_Log
Tên tập tin và đường dẫn của transaction log D:\GhiDanh\GhiDanh_Log.ldf
Kích cở khởi tạo của transaction log 6 MB
Kích cở tối đa của transaction log 8 MB
Gia số gia tăng tập tin transaction log 1 MB

b. Xem lại thuộc tính (properties) của CSDL GhiDanh. (HD: Nhắp phải chuột tại tên
CSDL, chọn properties). Quan sát và cho biết các trang thể hiện thông tin gì?.
c. Tại cửa sổ properties của CSDL, khai báo thêm
 Một Group File mới có tên là DuLieuGhiDanh
 Một tập tin dữ liệu (data file) thứ hai nằm trong Group file vừa tạo ở trên và có
thông số như sau Tên login của data file là GhiDanh_Data2; Tên tập tin và
đường dẫn vật lý của data file là D:\GhiDanh\GhiDanh_Data2.ndf.
 Chọn thuộc tính ReadOnly, sau đó đóng cửa sổ properies. Quan sát màu sắc
c
ủa CSDL. Bỏ thuộc tính ReadOnly.
2. Ở tại Query Analyzer (lưu ý: sau mỗi lần có sự thay đổi thì phải dùng các lệnh để
kiểm tra sự thay đổi đó)
a. Dùng lệnh Create DataBase, tạo một CSDL với các tham số được liệt kê như trong
bảng dưới. Lưu ý rằng CSDL này gồm một data file và nó được nằm trong primary
filegroup
Tham số giá trị
Database name SalesDB
Tên logic của data file chính SalesDB_data1
Tên tập tin và đường dẫn của data file chính D:\data\database\SalesDb_data1.mdf
Kích cở khởi tạo của CSDL 10 MB

SQL Server 2000
7/26
Kích cở tối đa của CSDL 40 MB
Gia số gia tăng tập tin CSDL 1 MB
Tên logic của transaction log SalesDB_Log
Tên tập tin và đường dẫn của transaction log D:\data\database\SalesDb.ldf
Kích cở khởi tạo của transaction log 6 MB
Kích cở tối đa của transaction log 8 MB
Gia số gia tăng tập tin transaction log 1 MB

b. Xem lại thuộc tính của CSDL SalesDB bằng Enterprise Manager và bằng thủ tục hệ
thống sp_helpDb, sp_spaceused.
c. Thêm một filegroup có tên là DuLieuSalesDB (HD: dùnglệnh Alter DataBase <Tên
Database> ADD FILEGROUP <Tên filegroup>)
d. Khai báo một secondary file có tên logic là SalesDb_data2, tên vật lý
SalesDB_data2.ndf nằm ở D:\Data\Database, các thông số khác tuỳ bạn chọn, data
file này nằm trong file group là DuLieuSalesDB. (HD: Dùng lệnh Alter Database ….
ADD FILE …. TO FILEGROUP …)
e. Dùng Books Online, bạn tìm hiểu thủ tục hệ thống sp_helpfilegroup dùng để làm gì?
f. Dùng lệnh Alter Database … Set … để cấu hình cho CSDL SalesDB có thuộc tính là
Read_Only. Dùng sp_helpDB để xem lạ thuộc tính của CSDL. Hũy bỏ thuộc tính
Read_Only.
g. Dùng lệnh Alter DataBase … MODIFY FILE … để tăng SIZE của SalesDB_data1
thành 50 MB. Tương tự tăng SIZE của tập tin SalesDB_log thành 10 MB. Nếu trong
Enterprise Manager để thay đổi SIZE của các tập tin bạn làm như thế nào?
3. Ở tại cửa sổ Enterprise Manager, thực hiện:
a. Dùng Enterprise manager hoặc Table Wizard tạo cấu trúc của các bảng sau trong
CSDL GhiDanh:
LOP (MaLop char(5)
, TenLop char(20), SiSoDuKien Int, NgayKhaiGiang

DateTime)
SV (MaSV char(5)
, TenHo NVarchar(50), NgaySinh DateTime, MALOP char(5))
Lưu ý: cột in đậm gạch chân là khóa chính và không chấp nhận giá trị Null, cột in
đậm không chấp nhận giá trị Null
b. Tạo Diagram giữa hai bảng vừa tạo.
c. Nhập dữ liệu tùy ý vào hai bảng, mỗi bảng khoảng 3 mẫu tin.
d. Dùng tác vụ General Script, để tạo đoạn Script cho CSDL và tất cả các đối tượng của
CSDL thành một tập tin Script có tên là GhiDanh.SQL
e. Vào Query Analyzer, mở tập tin Script vừa tạo và kh
ảo sát công dụng và cú pháp của
các lệnh có trong tập tin script.
f. Dùng thao tác xóa để xoá toàn bộ CSDL GhiDanh

4. Tìm hiểu về kiểu dữ liệu (datatype):
a. Tìm hiểu và trả lời các câu hỏi sau:
- Có bao mấy loại datatype, hãy liệt kê.
SQL Server 2000
8/26
- Các system datatype được SQL Server lưu trữ trong Table nào ở trong CSDL
nào.
- Các User-defined datatype được SQL Server lưu trữ trong Table nào ở trong
CSDL nào?
b. Vào Query Analyzer, chọn SalesDB là CSDL hiện hành, định nghĩa các datatype:
Kiểu dữ liệu (Data type) Mô tả dữ liệu (Description of data)
Mavung 10 ký tự
STT STT không vượt quá 30,000
SoDienThoai 13 ký tự , chấp nhận NULL
Shortstring Số ký tự thay đổi đến 15 ký tự
HD: Dùng thủ tục sp_addtype để định nghĩa

Ví dụ: EXEC sp_addtype SODienThoai, 'char(13)', NULL

c. Các User-defined datatype vừa định nghĩa được lưu trữ ở đâu và phạm vi sử dụng của
nó ở đâu (trong toàn bộ một instance hay chỉ ở trong CSDL hiện hành).
d. Có bao nhiêu cách liệt kê danh sách các các User-Defined datatype vừa định nghĩa.
SELECT domain_name, data_type, character_maximum_length
FROM information_schema.domains
ORDER BY domain_name
Hoặc SELECT * From Systype
e. Muốn User-Defined datatype được dùng trong tất cả các CSDL thì bạn định nghĩa nó
ở đâu?
f. Hãy xóa kiểu dữ
liệu SOSienThoai.

BÀI TẬP 4:
Ở tại cửa sổ Query analyzer, thực hiện:
a. Dùng lệnh Create Table … để tạo cấu trúc của các bảng sau trong CSDL SalesDB:
Lưu ý
- Khai báo cột có Null hoặc Not Null, không cần khai báo khóa chính, khóa ngoại.
SanPham
MaSp int Not null
TenSp nvarchar(50) Not null
MoTa nvarchar(50)
Đonvitinh nvarchar(20)
GiaGoc Money >=0
HoaDon
MaHD In
t
Not null
NgayLapHD DateTime

Noichuyen nvarchar(50) Not Null
MaKh char(5)
CT_HoaDon
MaHD Int Not null
SQL Server 2000
9/26
MaSp int Not null
Soluong Int >=0
Dongia Money
ChietKhau Money
NhaCungCap
MaNCC Int Not null
TenNcc Nvarchar(50) Not Null
Diachi Nvarchar(50)
Phone Varchar(24)
SoFax Varchar(24)
DCMail Varchar(50)
KhachHang
MaKh Char(5) Not null
TenKh Nvarchar(50) Not null
DiaChi Nvarchar(50)
Phone Varchar(24)
SoFax Varchar(24)
DCMail varchar(50)

b. Dùng lệnh Alter Table … khai báo các ràng khóa chính (Primary Key Constraint) ở
các bảng.
c. Dùng lệnh Alter Table … khai báo các ràng khóa ngoại (Foreign Key Constraint) ở
các bảng.
d. Dùng lệnh Alter Table … khai báo các ràng buộc miền giá trị (Check Constraint) như

sau: Dongia>=0; ChietKhau>=0;
e. Thêm cột LoaiHD vào bảng HOADON, LoaiHD có kiểu dữ liệu char(1), chỉ chấp
nhận ‘N’ hoặc ‘X’, giá trị mặc định là ‘N’.

BÀI TẬP 5:
Mục tiêu: Tạo CSDL, cấu hình CSDL; Định nghĩa user-defined data type
Tạo Table, định nghĩa các constraint; Chức năng Import/Export

1. Dùng T-SQL tạo CSDL Movies với các tham số sau:

Tập tin Datafile có: Name: Movies_data; pathname: C:\Movies\Movies_data.mdf;
Size: 25 MB; Maxsize: 40 MB; FileGrowth: 1 MB.
 Tập tin Log file có: Name: Movies_log; pathname: C:\Movies\Movies_log.ldf;
Size: 6 MB; Maxsize: 8 MB; FileGrowth: 1 MB.
2. Thực hiện, nhớ kiểm tra kết quả sau mỗi lần thực hiện:
 Thêm một Datafile thứ 2 có Name: Movies_data2; pathname:
C:\Movies\Movies_data2.ndf; Size: 10 MB; thông số khác không cần chỉ định.
SQL Server 2000
10/26
 Lần lược cấu hình CSDL Movies với chế độ single_user, restricted user, multi
user. Sau đó cài đặt lại là multi_user. Nhớ dùng lệnh để kiểm tra lại.
 Tăng kích cở của data file thứ 2 từ 10 MB lên 15 MB. Kiểm tra lại.
 Cấu hình CSDL về chế độ tự động SHRINK
 Phát sinh tập tin Script từ CSDL Movies, tạo script cho tất cả các đối tượng kể cả
database. Lưu vào đĩa với tên là Movies.SQL.
 Xoá CSDL Movies
3. Mở tậ
p tin Movies.SQL. Thực hiện:
 Bổ sung thêm câu lệnh tạo một filegroup tên là Data.
 Hiệu chỉnh maxsize của tập tin transaction log thành 10 MB

 Size của tập tin datafile thứ 2 thành 10 MB.
 Cho datafile thứ 2 nằm trong filegroup có tên là Data.
 Lưu tập tin scrip
 Cho thực thi toàn bộ tập tin script.
 Dùng sp_helpDB để kiểm tra sự tồn tại của Movies và các thông số của nó.

4. Các bảng có trong CSDL Movies là
Tên bảng Nội dung lưu chứa
Movie Danh sách các phim có trong cửa hàng
Customer Thông tin khách hàng
Category Danh sách các loại phim
Rental Thông tin thuê phim
Rental_detail Chi tiết thuê phim

Bạn hãy suy nghĩ xem mỗi bảng trên cần lưu những thông tin cụ thể nào (tức là các
cột nào), kiểu dữ liệu ra sao? Khóa chính của từng bảng, mối quan hệ giữa các bảng,
có những ràng buộc toàn vẹn nào?

5. Thực hiện định nghĩa các user-defined datatype sau vào trong CSDL Movies. Kiểm
tra sau khi tạo.
Kiểu dữ liệu (Data type) Mô tả dữ liệu (Description of data)
Movie_num Int, không chấp nhận Null
Category_num Int, không chấp nhận Null
Cust_num Int, không chấp nhận Null
Invoice_num Int, không chấp nhận Null

6. Thực hiện tạo các bảng vào CSDL Movies, nhớ kiểm tra lại cấu trúc bằng sp_help
Customer
Tên cột kiểu dữ liệu cho phép Null
Cust_num cust_num IDENTITY(300,1) No

Lname varchar(20) No
SQL Server 2000
11/26
Fname varchar(20) No
Address1 varchar(30) Yes
Address2 varchar(20) Yes
City varchar(20) Yes
State Char(2) Yes
Zip Char(10) Yes
Phone Varchar(10) No
Join_date Smalldatetime No

Category
Tên cột kiểu dữ liệu cho phép Null
Category_nu
m
category_num IDENTITY(1,1) No
Description Varchar(20) No

Movie
Tên cột kiểu dữ liệu cho phép Null
Movie_num Movie_num No
Title Cust_num No
Category_Num category_num No
Date_purch Smalldatetime Yes
Rental_price Int Yes
Rating Char(5) Yes

Rental:
Tên cột Kiểu dữ liệu cho phép Null

Invoice_num Invoice_num No
Cust_num Cust_num No
Rental_date Smalldatetime No
Due_date Smalldatetime No

Rental:_Detail
Tên cột Kiểu dữ liệu cho phép Null
Invoice_num Invoice_num No
Line_num Int No
Movie_num Movie_num No
Rental_price Smallmoney No

7. Thực hiện phát sinh tập tin script cho CSDL Movies với các lựa chọn sau, lưu với tên
Table.sql:
SQL Server 2000
12/26
 All Tables, All user-defined data types
 Generate the CREATE <object> command for each object
 Generate the DROP <object> command for each object
8. Ở Enterprise Manager, thực hiện tạo Diagram cho các bảng trong Movies. Bạn có tạo
được không? Tại sao? Tạm thời lưu diagram với tên là Movies.
9. Thực hiện định nghĩa các khoá chính (Primary Key Constraint) cho các bảng như sau,
nhớ kiểm tra các Constraint bằng lệnh sp_helpconstraint
Tên bảng cột làm khóa Tên của Primary Constraint
Movie Movie_num PK_movie
Customer Cust_nu
m
PK_custome
r
Category Category_nu

m
PK_category
Rental Invoice_num PK_rental

10. Thực hiện định nghĩa các khoá ngoại (Foreign Key Constraint) cho các bảng như sau,
nhớ kiểm tra các Constraint bằng lệnh sp_helpconstraint
Tên bảng cột làm khóa Tên bảng
được tham
chiếu đến
Cột được tham
chiếu
tên của Primary
Constraint
Cascade
Movie Category_num Category Category_num FK_movie
Rental Cust_num Customer Cust_num FK_rental
Rental_detail Invoice_num Rental Invoice_num FK_detail_invoice delete
Rental_detail Movie_num Movie Movie_num PK_detail_movie

11. Mở lại Diagram có tên Movie, xem khóa chính, mối quan hệ giữa các bảng.

12. Thực hiện định nghĩa các giá trị mặc định (Default Constraint) cho các cột ở các bảng
như sau, nhớ kiểm tra các Constraint bằng lệnh sp_helpconstraint
Tên bảng Cột có giá trị
Default
Giá trị Default tên của Primary Constraint
Movie Date_purch Ngày hiện hành DK_movie_date_purch
Customer join_date Ngày hiện hành DK_customer_join_date
Rental Rental_date Ngày hiện hành DK_rental_rental_date
Rental Due_date Ngày hiện hành + 2 DK_rental_due_date


13. Thực hiện định nghĩa các miền giá trị (Check Constraint) cho các cột ở các bảng như
sau, nhớ kiểm tra các Constraint bằng lệnh sp_helpconstraint
Tên bảng cột có giá trị
Default
Miền giá trị tên của Primary Constraint
Movie Rating ‘G’, ‘PG’, ‘R’, ‘NC17’, ‘NR’ CK_movie
Rental Due_date >= Rental_date CK_Due_date

SQL Server 2000
13/26
14. Thực hiện phát sinh tập tin script cho các đối tượng trong CSDL Movie. Tên của tập
tin là Constraint.sql. Với lựa chọn Script Primary Keys, Foreign Keys, Default, and
Check Constraints.

15. Chọn CSDL là Pub, lần lược thực hiện các yêu cầu và cho nhận xét.
 Dùng sp_helpconstraint hoặc bật Diagram của bảng Authors và bảng TitleAuthor,
để biết được tên của foreign key constraint được định nghĩa trên
TitleAuthor.Au_Id tham chiếu đến Author.Au_ID là ? (tên là
FK__Titleauthor__au_id__0519C6AF).
 Cho biết Au_ID của Author có au_lname là ‘White’ ( dùng Select … From …
Where , kết quả nhận về là 172_32_1176)
 Dùng câu lệnh sau để cập nh
ật giá trị của AU_ID thành '172-32-1177'.
UPDATE authors
SET au_id ='172-32-1177'
WHERE au_lname='White'
Bạn có thực hiện được không? Tại sao?
 Thực hiện diable ràng buộc khóa ngoại trên.
 Chạy lại câu Update trên, thực hiện được không?

 Cập nhật lại giá trị cũ '172-32-1176'
 Thực hiện enable lại ràng buộc khóa
16. Mở CSDL SalesDb, thực hiện:
 Thêm một Defaul Constraint cho cột MoTa với giá trị mặc định là ‘N/A’
 Thêm một Default Constraint cho cột NgayLapHD với giá tr
ị mặc định là ngày
hiện hành.
17. Dùng chức năng Import/Export để đưa (nhớ kiểm tra kết quả sau mỗi lần thực hiện):
 Tất cả các thông tin nhân viên có trong bảng Employees trong NorthWind ra
thành tập tin NhanVien.txt.
 Dữ liệu của các bảng Products, Orders, Order Details trong bảng NorthWind vào
tập tin QLHH.MDB. Lưu ý: Tập tin QLHH.MDB phải tồn tại trên đĩa trước khi
thực hiện Export.
 Dữ liệu các bảng Products, Suppliers trong NorthWind ra thành tập tin
SP_NCC.XLS
 Các khách hàng có City là LonDon từ bả
ng Customers trong NorthWind ra thành
tập tin KH.TXT.
 Danh sách các sản phẩm ở Products trong NorthWind thành tập tin
SanPham.TXT, thông tin cần lấy bao gồm ProductID, ProductName,
QuantityPerUnit, Unitprice.
 Các sản phẩm có SupplierID là 1 hoặc 2 hoặc 3 ở bảng Products trong NorthWind
vào bảng SanPham trong SalesDB. Lưu ý chỉ chọn những cột mà trong bảng sản
phẩm cần.
 Các nhà cung cấp có Country là USA ở bảng Suppliers trong NorthWin vào bảng
NhaCungCap trong SalesDB. Lưu ý: chỉ chọn những cột mà trong bản
Nhacungcap cần.
 Danh sách các nhân viên có trong tập tin Nhanvien.TXT vào bả
ng NhanVien
SQL Server 2000

14/26

18. Dùng câu lệnh INSERT … SELECT với các cột chọn cần thiết để đưa (nhớ kiểm tra
kết quả sau mỗi lần thực hiện):
 Các khách hàng có trong bảng Customers trong NorthWind vào bảng KhachHang
trong SalesDB.
 Các sản phẩm có SupplierID là 4 hoặc 5 hoặc 6 ở bảng Products trong CSDL
NorthWind vào bảng Sanpham trong SalesDB.
 Danh sách tất cả các hoá đơn có OrderID nằm trong khoảng 10248 đến 10256
trong bảng Orders trong Northwind vào bảng HoaDon, các hoá đơn này được xem
là hoá đơn xuất - tức LoaiHD là ‘X’

Danh sách tất cả các hoá đơn có OrderID nằm trong khoảng 10257 đến 10270
trong bảng Orders trong Northwind vào bảng HoaDon, các hoá đơn này được xem
là hoá đơn nhập - tức LoaiHD là ‘N’
 Danh sách tất cả các chi tiết hoá đơn có OderID nằm trong khoảng 10248 đến
10270 trong bảng Order Detail trong NorthWind vào bảng CT_HoaDon.

BÀI TẬP 6:
Dùng CSDL NorthWind, dùng câu lệnh SELECT … FROM … để cho biết:
1. Các product có đơn giá lớn hơn đơn giá trung bình của các product.
2. Các product có đơn giá lớn hơn đơn giá trung bình của các product có ProductName
bắt đầu là ‘N’
3. Các customer không có lập hóa đơn trong tháng 7/1997
4. Các customer có lập hóa đơn trong 15 ngày đầu tiên của 7/1997
5. Danh sách các customer ứng với tổng tiền các hoá đơn được lập từ 31/12/1996 đến
1/1/1998.
6. Danh sách các customer ứng với tổng tiền các hoá đơn, mà các hóa đơn được lập từ
31/12/1996 đến 1/1/1998 và tổng tiền các hóa đơn >20000.
7. Danh sách các customer ứng với tổng số hoá đơn, tổng tiền các hoá đơn, mà các hóa

đơn được lập từ 31/12/1996 đến 1/1/1998 và tổng tiền các hóa đơn >20000.
8. Danh sách các Customer ch
ưa từng lập hóa đơn (viết bằng ba cách: dùng NOT
EXISTS, dùng LEFT JOIN, dùng NOT IN )
9. Danh sách các City có nhiều hơn 3 customer.
10. Danh sách các Category có tổng số lượng tồn (UnitsInStock) lớn hơn 300, đơn giá
trung bình nhỏ hơn 25. Thông tin kết quả bao gồm CategoryID, CategoryName,
Total_UnitsInStock, Average_Unitprice.
11. Danh sách các Category có tổng số product lớn hớn 10. Thông tin kết quả bao gồm
CategoryID, CategoryName, Total_UnitsInStock.
12. Danh sách các product, thông tin bao gồm: Productname, CategoryName, Unitprice.
Có dùng mệnh đề COMPUTE để liệt kê đơn giá trung bình theo từng CategoryName.
13. Danh sách các product theo từng CategoryName, thông tin bao gồm: Productname,
CategoryName,Unitprice, UnitsinStock. Có dùng mệnh đề COMPUTE để liệt kê
đơn
giá trung bình, tổng số lượng tồn (sum of UnitsinStock) theo từng CategoryName.
14. Bổ sung COMPUTE vào câu trên để thống kê thêm đơn giá trung bình và tổng số
lượng tồn của tất cả các product.
15. Liệt kê danh sách các City có Customers hoặc Employee (dùng Union)
SQL Server 2000
15/26
16. Liệt kê danh sách các Country có Customers hoặc Employee (dùng Union)
17. Kết danh sách các Customer và Employee lại với nhau. Thông tin gồm CodeID,
Name, Address, Phone. Trong đó CodeID là CustomerID/EmployeeID, Name là
Companyname/LastName + FirstName, Phone là Homephone.
18. Danh sách các Customer ứng với tổng tiền của các hóa đơn ở từng tháng. Thông tin
bao gồm CustomerID, CompanyName, Month_Year, Total. Trong đó Month_year là
tháng và năm lập hóa đơn, Total là tổng của Unitprice* Quantity, có thống kế tổng
của total theo từng Customer và Month_Year . (có dùng COMPUT)


BÀI TẬP 7
Dùng CSDL SalesDB, thực hiện tạo các view sau:
1. Tạo một view có tên là vwSanPham_1, chính là danh sách các sản phẩm, được sắp
xếp theo tên sản phẩm. Thông tin bao gồ
m Masp, TenSp, Mota, Donvitinh, GiaGoc,
MaNCC.
2. Lần lượt tạo view có tên là vwSanPham_2, vwSanPham_3, thông tin giống như
vwSanPham_1 nhưng có thêm từ khóa WITH ENCRYPTION, WITH
SCHEMABINDING.
3. Bạn thực hiện: Nhớ kiểm tra và cho nhận xét.
 Dùng lệnh Insert … values chèn mẫu tin sau vào bản NhaCungCap:
MaNCC TenNCC DiaChi Phone SoFax DCMail
101 Cao Dang Cong
Nghiep 4
12 Nguyen
Van Bao
8459232 8459232
u.vn
 Dùng lệnh Insert … values chèn mẫu tin sau thông qua vwSanPham_1
Masp TenSp MoTa Donvitinh GiaGoc MaNCC
1111 Phan mem Quan Ly Nhan
Su
Version 1.0 Dia 10000000 101
1112 Dia Chuong Trinh Thi
Trac Nghiem SQL
CD Dia 6000 101
1113 Dia Chuong Trinh Thi
Trac Nghiem VB
CD Dia 6000 101
 Dùng sp_helptext <ViewName> để lần lược xem text của các view

vwSanPham_1, vwSanPham_2, vwSanPham_3
 Dùng lệnh Alter Table để hiệu chỉnh kiểu dữ liệu của cột Donvitinh thành
nvarchar(25), có hiệu chỉnh được không? Tại sao? Muốn hiệu chỉnh được thì
phải như thể nào? Bạn thử thực hiện.
4. Tạo view có tên là vwSanPhamCDCN4, chỉ có những sản phẩm có của nhà cung cấp
mã số là 101, với lựa chọn WITH CHECK OPTION.
5. Tạo view có tên là vwSanPhamNCC123, chỉ có những sả
n phảm của các nhà cung
cấp có mã số là 1 hoặc 2 hoặc 3, không dùng WITH CHECK OPTION.
6. Dùng câu lệnh Insert … Values để đưa mẫu tin thông qua view vwSanPhamCDCN4.
Bạn có chèn được không? Tại sao? Bạn thử chèn mẩu tin này thông qua
vwSanphamNCC123, có chèn được không? Bạn thử dùng câu lệnh SELECT để xem
toàn bộ dữ liệu từ vwSanPham123, bạn có thay mẫu tin này không? Tại sao?
Masp TenSp MoTa Donvitinh GiaGoc MaNCC
1114 Giai phap CNTT trong Giai phap Mo hinh 10000000 4
SQL Server 2000
16/26
doanh nghiep nho

7. Dùng lệnh Delete để xoá mẫu tin vừa chèn ở trên. Sau đó chèn mẫu tin này với mã
nhà cung lấp là 101 nhưng chèn thông qua view vwSanPhamCDCN4.
8. Dùng lệnh Update và thông quan vwSanPhamCDCN4 để cập nhật MaNCC thành 1
cho mẫu tin có mã sản phẩm là 1114. Bạn có cập nhật được không? Nếu cập nhật
thông qua view vwSanPhamNCC123 thì kết quả như thế nào?
9. Tạo 3 bảng lần lượt có tên là KhangHang_Bac, KhachHang_Trung,
KhachHang_Nam, dùng để lưu danh sách các khách hàng ở ba miền, có cấu trúc như
sau: MaKh, TenKH, DiaChi, KhuVuc. Trong đó,
KhachHang_Bac có một Check Constraint là Khuvuc là ‘Bac Bo’
KhachHang_Nam có một Check Constraint là Khuvuc là ‘Nam Bo’
KhachHang_Trung có m

ột Check Constraint là Khuvuc là ‘Trung Bo’
Khoá chính là MaKH và KhuVuc .
10. Tạo một partition view từ ba bảng trên, sau đó chèn mẫu tin tuỳ ý thông qua view.
Kiểm tra xem mẫu tin được lưu vào bảng nào?
11. Lần lược tạo các view sau, đặt tên tùy ý, sau khi tạo kiểm tra sự tồn tại và kết quả truy
vấn từ view.
 Danh sách các sản phẩm có chữ ‘Boxes’ trong DonViTinh.
 Danh sách các sản phẩm có đơn giá <10.
 Các sản phẩm có đơn giá gốc lớn hơn hay bằng đơn giá gốc trung bình.

Danh sách các khách hàng ứng với các hóa đơn được lập. Thông tin gồm
MaKH, TenKH, và tất cả các cột trong bảng HoaDon và CT_HoaDon.
12. Trong các view ở câu trên view nào có thể INSERT, UPDATE, DELETE dữ liệu
thông qua view được? Hãy Insert/Update/Delete thử dữ liệu tùy ý.

BÀI TẬP 8
Lập trình với T-SQL, tạo các đoạn Baches sau:
1. Khai báo một biến @maso kiểu số nguyên, gán giá trị 7 cho biến @maso, viết câu
lệnh lấy ra danh sách các sản phẩm có masp nhỏ hơn giá trị chứa trong biến @maso.
2. Khai báo và giá giá trị đại di
ện cho nơi chuyển hàng của hoá đơn. Kiểm tra xem nơi
này có bao nhiêu hoá đơn, giả sử là n. In ra cau thông báo cho biết ‘Có <n> hoá
đơn’. Nếu không có hoá đơn nào cả thì in ra câu ‘Không có hoá đơn’. Khi chy đoạn
batch thì thay đổi giá trị của biến để kiểm chứng kết quả.
3. Viết một vòng lặp WHILE để nhập 10 mẫu tin tùy ý vào bảng HOCVIEN (MAHV,
TENHV, LOP), với bảng dữ liệu như sau:
1 Hoc vien 1 CDTH3
2 Hoc vien 2 CDTH3
…. …. …. …
10. Hoc vien 10 CDTH3

4. Viết một câu lệnh SELECT có sử d
ụng CASE dùng để hiển thị MaSP, TenSp,
Soluong, Dongia, Huehong. Trong đó HueHong = Soluong * DonGia*TiLe,
TiLe = 5% nếu Soluong <5
SQL Server 2000
17/26
= 6% nếu 10>soluong >=5
= 8% NẾU 15>Soluong>=10
=10% nếu Soluong>=15
5. Viết đoạn Batch để giải một phương trình bậc nhất khi biết a, b

BÀI TẬP 9
Thông báo lỗi, Stored Procedure, User-Defined Function, Lập trình Cursor. Dùng
CSDL SalesDB, Northwind.

Phần 1: Thông báo lỗi
1. SQL Server có khoảng bao nhiêu thông báo mã lỗi chuẩn? Được lưu vào bảng nào?
Bạn hãy tìm hiểu các thông báo lỗi chuẩn này. Bạn có thể xây dựng thêm các thông
báo lỗi của người dùng không?
2. Hàm @@ERROR có ý nghĩa gì?
3. Có bao nhiêu cách để xây dựng một thông báo lỗi c
ủa người dùng?
4. Thực hiện xây dựng các thông báo lỗi của người dùng như sau. Lưu ý các từ trong
<…> là phải dùng tham số:

Number Severity_level Text of message
50001 10 Không tìm thấy mẫu tin <… > trong <… >
50002 16 Không thể xoá được <mã Khách hàng > vì <mã Khách
hàng> có tồn tại trong <Hoá đơn>
50003 16 Một lớp chỉ tối đa <n> sinh viên.

50004 16 Đ
ơ
n giá bán phải luôn luôn lớn h
ơ
n đ
ơ
n giá gốc

5. Hãy thử sử dụng các thông báo lỗi vừa xây dựng bằng lệnh Raiserror

Phần 2: Stored Procedure – User-Defined Functions. Lưu ý: Bạn tự quyết định là có sử
dụng các tham số đầu vào, tham số đầu ra, trả về mã lỗi, xây dựng trong một Transaction
hay không?

1. Viết thủ tục có tham số a, b dạng input để giải phương trình bậc nhất ax+b=0.
2. Viết thủ tục có tham số a, b, c dạng input để giải phươ
ng trình bậc hai, ax
2
+bx+c=0. (có
sử dụng lại thủ tục giả phương trình bậc nhất trong trường hợp a=0)
3. Viết một thủ tục dùng để thực hiện các công việc sau: tạo một bảng tạm tên là #MyTable,
chèn hai mẫu tin tùy ý vào bảng này, dùng câu lệnh SELECT … FROM để liệt kê các
mẫu tin có trong bảng #MyTable. Cấu trúc của #MyTable như sau CustID nchar(5),
CustName nvarchar(40), AvgDiff float.
4. Viết thủ tục Sp_InsertSanPham có tham số dạng input dùng để chèn một mẫu tin vào
bảng Sanpham.
5. Viết th
ủ tục Sp_InsertNCC_KH có tham số dùng để chèn một mẫu tin vào bảng
NhaCungCap hoặc KhachHang. Trong dùng 1 tham số @flag kiểu bit để phân biệt 2 bảng
trên khi chèn.

SQL Server 2000
18/26
6. Viết thủ tục dùng để xóa 1 sản phẩm khi biết Masp.
7. Phát triển bài trên, viết thủ tục cho phép xóa 1 sản phẩm hay 1 khách hàng hay 1 nhà
cung cấp khi biết Masp hay MaKh hay MaNCC
8. Viết thủ tục Sp_Del_HD, dùng để xóa 1 hóa đơn khi biết maHD. Lưu ý trước khi xóa
mẫu tin trong hóa đơn thì phải xóa các mẫu tin của hoá đơn đó trong CT_HoaDon. Nếu
không xoá được hoá đơn thì cũng không được phép xóa CT_HoaDon của hóa đơn đó.
9. Viết thủ tục Sp_Update_SP có tham số dùng
để cập nhật dữ liệu mới của một mẫu tin nào
đó khi biết Masp trong bảng SanPham.
10. Phát triển từ bài trên, viết thủ tục có tham số dùng để cặp nhật dữ liệu mới của một mẫu
tin nào đó trong bảng NhaCungCap hoặc KhachHang. Dùng 1 tham số @flag kiểu bit để
phân biệt 2 bảng trên.
11. Viết một thủ tục dùng để lấy về tổng số lượng lập hoá đơ
n và đơn giá trung bình của của
một sản phẩm trong một tháng năm nào đó khi biết mã sản phẩm.
12. Viết thủ tục trả về tổng số lượng nhập hoặc xuất của 1 sản phẩm nào đó (dùng @flag để
phân biệt trả về số lượng nhập hoặc xuất).
13. Thay vì viết thủ tục như câu trên, bạn hãy dùng hàm (User-defined Function) để thực hiện
yêu cầu củ
a câu trên.
14. Viết hàm trả về kết quả là một bảng (Table), thông tin bao gồm TênNCC, Masp, TenSp,
TongSoLuongBan, ĐonGiaTrungBình (bán có nghĩa là LoaiHD là xuất). Lưu ý viết bằng
hai cách: Inline Table-Valued Functions và MultiStatement Table-Valued Function.
15. Viết hàm trả về tổng thành tiền của một hóa đơn nào đó.
Thanh tien = (SốLượng * Đơn giá) - SốLượng * Đơn giá*ChiếtKhấu
16. Viết hàm trả về chiết khấu của sản phẩm dựa vào số lượng lập hoá đơn và theo quy
định
sau:

Nếu số lượng <=5 thì chiết khu là 0.05
Nếu số lượng từ 6 đến 10 thì chiết khấu 0.07
Nếu số lượng từ 11 đến 20 thì chiết khấu là 0.09
ngược lại thì 0.1
17. Tương tự viết một hàm trả về xếp loại sinh viên khi biết điểm của sinh viên đó và dựa vào
quy tắc xếp loại thông thường.
18. Viết hàm trả về danh sách các hoá đơn đã lậ
p của một khách hàng nào đó trong một tháng
năm nào đó. Thông tin gồm: Makh, TenKh, Diachi, mahd, ngaylapHD, Noichuyen,
LoaiHD. Trong đó, LoaiHD được hiển thị rõ là Nhập hoặc Xuất.

Phần 3: Lập trình với Cursor của T_SQL
1. Viết một thủ tục có dùng con trỏ (Cursor) để thực hiện in ra cửa sổ kết quả của Query
Analyzer báo cáo như mẫu. Báo cáo liện kê danh sách các CustomerID, CompanyName,
OrderID và OrderDate được lập trong năm 1997 của các khách hàng có CustomerID bắt
đầu là ‘A’.
Customer:ALFKI - Alfreds Futterkiste
Order:10643 (Aug 25 1997)
Order:10692 (Oct 3 1997)
Order:10702 (Oct 13 1997)
Customer:ANATR - Ana Trujillo Emparedados y helados
SQL Server 2000
19/26
Order:10625 (Aug 8 1997)
Order:10759 (Nov 28 1997)
Customer:ANTON - Antonio Moreno Taquería
Order:10507 (Apr 15 1997)
Order:10535 (May 13 1997)
Order:10573 (Jun 19 1997)
Order:10677 (Sep 22 1997)

……….

2. Viết một thủ tục có dùng con trỏ để thực hiện in ra cửa sổ kết quả của Query Analyzer
báo cáo như mẫu. Báo cáo liện kê danh sách các CompanyName, ContactName,
ContactTitle của tất cả các Customers
There are 91 Customers
1 Alfreds Futterkiste Maria Anders Sales Representative
2 Ana Trujillo Emparedados y helados Ana Trujillo Owner
3 Antonio Moreno Taquería Antonio Moreno Owner
4 Around the Horn Thomas Hardy Sales Representative
5 Berglunds snabbköp Christina Berglund Order Administrator
6 Blauer See Delikatessen Hanna Moos Sales Representative
……………………………
90 Wilman Kala Matti Karttunen Marketing Assistant
91 Wolski Zajazd Zbyszek Piestrzeniew Owner

3. Viết một thủ tục CreateSalesCursor dùng để khai báo một biến con trỏ, với tập dữ liệu của
con trỏ là danh sách các hoá đơn của các khách hàng. Thông tin bao gồm CompanyName,
CustomerID, OrderID, OrderDate.
4. Viết m
ột thủ tục có dùng con trỏ để thực hiện các công việc sau:
 Tạo bảng tạm tên là #MyTable, có cấu trúc như sau CustID nchar(5), CustName
nvarchar(40), AvgDiff float.
 Lần lược duyệt bằng con trỏ, toán khoảng cách ngày trung bình giữa các hoá đơn
(AvgDiff) của từng khách hàng và chèn vào bảng #MyTable. Với CustID là
CustomerID, CustName là CompanyName, AvgDiff là tổng khoảng cách ngày giữa
các ngày lập hóa đơn của khách hàng chia cho tổng số hoá đơn.
Ví dụ: Khách hàng CDCN4 có lập 4 hoá đơn như sau
Mahd NgayLapHD Khoảng cách ngày
1111 1/1/2004

1156 3/1/2004 2
2345 5/2/2004 33
3452 7/2/2004 2

Æ CDCN4, Cao Dang Cong Nghiep 4, (2+33+2)/4 : được chèn vào #MyTable.
SQL Server 2000
20/26
 Dùng câu lệnh Select … From để cho xem các mẫu tin trong #MyTable trước khi kết
thúc thủ tục.

Lưu ý: Khai báo con trỏ bằng cách gọi thực thi thủ tục CreateSalesCursor

BÀI TẬP 10
Cài các bẩy lỗi – Trigger, dùng CSDL SalesDB
Bạn có thể dùng lệnh để cho phép hay không cho phép việc tắt/bật Trigger khi cần
thiết
ALTER TABLE <Table_Name>
{DISABLE | ENABLE TRIGGER} {ALL | Trigger_Name}
- Bạn có thể tuỳ chọn là viết bởi After trigger hoặc Instead of trigger
- Bạn phải tự cho mẫu dữ liệu để kiểm chứ
ng Trigger.

1. Viết trigger cho thao tác Insert của bảng SanPham. Khi có thao tác chèn vào bảng sản
phẩm thì đưa ra một thông báo là ‘Có <n> mẫu tin được chèn’.
2. Viết trigger cho thao tác Insert trên bảng HoaDon. Sau khi có mẫu tin được chèn vào
bảng HoaDon thì mẫu tin đó cũng được chèn vào bảng HoaDon_Luu. Lưu ý: nếu chưa
có bảng HoaDon_Luu thì tạo HOADon_Luu (có cấu trúc hoàn toàn giống như bảng
HoaDon) trước khi kiểm chứng trigger.
3. Viết trigger cho thao tác Insert, Update, Delete trên bảng CT_HoaDon. Khi có mẫu tin
được chèn vào hoặc hiệu chỉnh hoặc xoá thì cập nhật lại c

ột TongTriGia trong bảng
HoaDon với TongTriGia = Tổng tiền của Số lượng * Đơn giá. Lưu ý: nếu bảng HoaDon
chưa có cột TongTriGia thì bổ sung vào trước khi kiểm chứng trigger.
4. Viết trigger cho thao tác Insert, Update để kiểm tra ràng buộc liên thuộc tính liên quan hệ
giữa DonGia trong CT_HoaDon và GiaGoc trong bảng sản phẩm như sau: DonGia trong
CT_HoaDon luôn luôn bằng GiaGoc trong Sản phẩm, nếu vi phạm thì thông báo và
không cho phép Insert hay Update.
5. Viết trigger cho thao tác Insert, Update, Delete trên bảng CT_HoaDon. Khi có mẫu tin
chèn vào bảng CT_HoaDon thì tự động cập nhật chiết khấu, chiế
t khấu được tính thông
qua hàm tính chiết khấu của bài tập tuần trước.
6. Có ràng buộc liên thuộc tính là ngày giao nhận hàng của một hóa đơn thì luôn luôn lớn
hơn hay bằng giao nhận hàng. Hãy bắt ràng buộc trên khi cần thiết.
7. Giả sử có 2 bảng LOP(Malop
, TenLop), SV(Masv, HoTen, Malop), với một ràng buộc
dạng liên bộ như sau: Mỗi lớp chỉ có tối đa 10 hoc viên. Hãy viết 1 trigger để bẩy ràng
buộc đó, nếu vi phạm ràng buộc thì nảy một mã lỗi và đưa ra thông báo “Lop này da du
hoc vien”.
8. Giả sử có 2 bảng LOP(Malop
, TenLop, SiSoToida, SiSoThuc), SV(Masv, HoTen,
Malop
), với các ràng buộc dạng liên bộ liên quan hệ như sau:
4a. Chỉ chèn thêm hoặc hiệu chỉnh chuyển lớp cho một sinh viên của bảng SV khi sỉ số
của lớp đó vẫn còn nhỏ hơn SiSIToiDa.
4b. Khi có thao tác thêm, xoá, sửa thông tin trên bảng SV thì phải cập nhật lại SiSoThuc
Hãy bắt các ràng buộc trên và nảy ra mã lỗi thích hợp khi có các thao tác tương ứng xuất
hiện mà vi phạm ràng buộc đặt ra.
9. Giả sử có bảng theo dõi quá trình tăng lương c
ủa nhân viên như sau
SQL Server 2000

21/26
QuaTrinhTangLuong(MANV, NGAYTANG, MUCLUONG)
Biết rằng mức lương của nhân viên chỉ có tăng lên theo thời gian. Hãy viết trigger để ép
thỏa điều kiện này.

BÀI TẬP 11
Về DTS, dùng CSDL SalesDB
Lưu ý: Mỗi 1 Package nên đặt tên ngắn gọn gợi nhớ
Mỗi một Connection đặt tên ngắn gọn gợi nhớ, có một Data Source, vài thông số đi
kèm.
Mỗi một task có một description ngắn gọn gợi nhớ, có thông số đi kèm tùy theo task.
Sau khi tạo xong Package thi phải cho thực thi và ki
ểm tra kết quả.

Phần 1: Sử dụng Import/Export Wizard để thực hiện các
Bạn hãy thực hiện và tìm hiểu kỹ hơn các hộp thoại trong tiến trình Import/ Export
Wizard thông qua một số bài tập tuần 3
Phần 2: Sử dụng Data Tranfer Services
1. Thực hiện các công việc sau.
a. Dùng chức năng General SQL Script để tạo tập tin Products.SQL chứa đoạn Script
tạo cấu trúc bảng Products.
b. Dùng Notepad soạn thảo các tập tin
NewData.txt, có nội dung sau:
1,Sugar Free Alice Mutton,7,6,20 - 1 kg tins,39.2500,5,0,0,1
2,Sugar Free Gudbrandsdalsost,15,4,10 kg pkg.,36.2500,31,0,15,0
3,Lite Outback Lager,7,1,24 - 355 ml bottles,15.1500,21,10,30,0
4,Lite Fløtemysost,15,4,10 - 500 g pkgs.,21.6500,32,0,0,0
5,Nonfat Chai,1,1,10 boxes x 20 bags,18.2500,47,0,10,0
6,Nonfat Chang,1,1,24 - 12 oz bottles,19.2500,25,40,25,0
c. Dùng Notepad soạn thảo các tập tin BackupSaleDb.sql, có nội dung sau:

BACKUP DATABASE SalesDb TO DISK = 'C:\Program Files\Microsoft SQL
Server\Mssql\Backup\NWR.bak'
WITH INIT
2. Tạo Package gồm các thành phần sau:
- Một Connection có tên là ConnectionNorthWind với data source là Microsoft OLE
DB Provider for SQL Server và CSDL là NorthWind
- Một Connection có tên là ConnectionSalesDB với data source là Microsoft OLE DB
Provider for SQL Server và CSDL là SalesDb
- Một tác vụ loại Transform Data Task dùng để chuyển toàn bộ các mẫu tin trong bảng
Categories từ CSDL NorthWind sang CSDL SalesDB.
- Một tác vụ loại Copy SQL Server Objects Task dùng để sao chép bảng Region,
Shippers, 2 Stored procedure hoặc user-defined function từ CSDL NorthWind sang
CSDL SalesDB.
3. Tạo Package có tên là Execute_Application thực hiệ
n các tác vụ sau: Dùng Execute
Process Task, có dùng Workflow để qui định thứ tự thực hiện.
- Gọi thực thi ứng dụng Excel
SQL Server 2000
22/26
- Gọi thực thi chương trình .EXE nào đó mà bạn biết.
4. Tạo Package gồm các thành phần sau:
- Một Connection có tên là ConnectionNorthWind với data source là Microsoft OLE
DB Provider for SQL Server và CSDL là NorthWind
- Một Connection có tên là ConnectionExcel với data source là Microsoft Excel97-
2000 và FileName là DataExcel.XLS
- Một tác vụ loại Transform Data Task dùng để chuyển toàn bộ các mẫu tin trong bảng
[Order Details] từ CSDL NorthWind sang tập tin DataExcel.XLS.
- Một tác vụ loại Transform Data Task dùng để chuyển toàn bộ các mẫu tin trong bảng
Orders từ CSDL NorthWind sang tập tin DataExcel.XLS.
5. Tạo Package gồm các thành phần sau:

- Mộ
t Connection có tên là MyConnection với data source là Microsoft OLE DB
Provider for SQL Server và CSDL là SalesDb
- Tạo tác vụ loại Execute SQL Task dùng để thực hiện tập tin script Products.SQL
- Tạo một tác vụ Bulk Insert task dùng để chèn các mẫu tin hiện có trong tập tin
NewData.TXT vào bảng Products vừa tạo.
- Chọn Workflow là On Success theo thứ tự liệt kê của hai tác vụ ở trên.
6. Hiệu chỉnh package ở câu 2 để đạt được yêu cầu sau:
- Trước khi tác vụ Copy SQL Server Objects Task được thực hiện thì phải kiểm tra xem
các đối tượ
ng muốn sao chép đã có trong SalesDb chưa, nếu có phải xoá trước khi
thực hiện tác vụ.
- Tạo thêm một tác vụ nữa dùng để gọi thực thi Package có tên là Execute_Application.
7. Tạo Package dùng để thực hiện các công việc sau:
- Disable toàn bộ các ràng buộc khoá ngoại trên bảng SanPham, HoaDon
- Thực hiện xoá toàn bộ các mẫu tin hiện có trong bảng SanPham, HoaDon,
NhaCungCap.
- Thực hiện chuyển toàn bộ các mẫu tin hiện có trong bảng Products, Orders,
Customers từ CSDL NorthWind sang các bảng SanPham, HoaDon, NhaCungCap.

u ý chỉ lấy những cột cần thiết.
- Bật Enable lại toàn bộ các buộc khoá ngoại trên bảng SanPham, HoaDon
- Qui định Workflow cho các tác vụ nếu thấy cần thiết.
8. Tạo Package dùng để thực hiện các công việc sau:
- Xoá tất cả các mẫu tin hiện có trong bảng CT_HOADON trong SalesDB.
- Thực hiện chuyển toàn bộ dữ liệu order details hiện có trong tập tin DataExcel.XLS
vào bảng CT_HOADON. Lưu ý chỉ chọn lấy những c
ột cần thiết.
9. Tạo Package dùng để thực hiện đoạn Script có tên là BackupSaleDb.sql. Định thời biểu
thực thi Package này mỗi ngày hoặc tùy theo bạn chọn.

10. Dùng DTS Design để tạo các package: thực thiện tuần tự các bước sau:
- Một conection có tên là NewProducts với Data Source là Text File (Source), File name
là NewData.TXT
- Một conection tên là SaleDBReportData với Data Source là MicroSoft OLE DB
Provider for SQL Server và DataBase là SaleDB.
- Tạo một tác vụ loại Transform Data Task với Source là conection tên là NewProducts,
Destination là SaleDBReportData.
SQL Server 2000
23/26
+ Trang Destination: tạo bảng có cấu trúc sau
CREATE TABLE dbo.NewProducts
( ProductID int IDENTITY (1, 1) NOT NULL, ProductName nvarchar (40) NOT
NULL,
SupplierID int NULL, CategoryID int NULL, QuantityPerUnit nvarchar (20) NULL,
UnitPrice money NULL, UnitsInStock smallint NULL, TotalValue money NULL,
UnitsOnOrder smallint NULL, ReorderLevel smallint NULL,
Discontinued bit NOT NULL )
+ Trang Transformation: theo mặc định có một ánh xạ 1-1 từ các cột của Source đến
Destination. Chúng ta sẽ hiệu chỉnh một số cột dựa vào các ánh xạ sau còn các ánh xạ
khác giữ nguyên.
 Xây dựng ánh xạ giữa Col010 và Discontinued
 Xây dựng ánh xạ giữa Col009 và ReoderLevel
 Xây dựng ánh xạ giữa Col008 và UnitOnOrder
 Xây dựng ánh xạ giữa Col006, Col007 và TotalValue với ActiveX
Script là
DTSDestination(“TotalValue”)=DTSSource(“Col006”)* DTSSource(“Col007”)
- Tạo một tác vụ
loại Execute SQL Task với SQL Statement là câu lệnh Drop Table
NewProducts và Existing connection là SaledDbReportData.
- Tạo một tác vụ loại Execute SQL Task với SQL Statement là câu lệnh được Brower từ

tập tin BackupSaleDb.sql và Existing connection là SaledDbReportData.
- Qui định Workflow thực hiện các tác vụ mà theo bạn là hợp lý nhất.
11. Thiết kế 1 Package để đưa dữ liệu thông tin Customers và Products trong CSDL
NorthWind ra thành các bảng trong tập tin CSDL Acsess BANHANG.MDB. Lưu ý mỗi
bảng chỉ lấy tối đa 5 cột.
12. Tạo một Package dùng để thực hiện các công công việc theo tu
ần tự sau:
- Xoá CSDL tên là QLSV nếu có.
- Tạo CSDL QLSV như sau:
Các tập tin đặt ở C:\DATA. Data file có tên là QLSV_DAT.MDF, kích thước khởi tạo
của Data File là 5 MB, tối đa 50MB, tỉ lệ tăng là 10%. Log file có tên là QLSV.NDF,
kích thước tạo là 2MB, tối đa là 20 MB, tỉ lệ tăng là 10%
- Tạo bảng LOP (MaLop char(5), TenLop char(20), SiSoDuKien Int). Trong đó
SiSoDuKien >=0
- Tạo bảng SV (MaSV char(5), TenHo NVarchar(50), NgaySinh DateTime, MALOP
char(5).
- Tạo các khóa chính khóa ngoại của bảng LOP và SV

Phần 3: Sử dụng BCP, Bulk Insert
1. Dùng BCP
a. Thực hiện:
-
Khởi động Query Analyzer. Mở tập tin Products.SQL và cho thực thi.
- Khởi động cửa sổ Command Line của Windows
- Gõ bcp và nhấn Enter, quan sát các tham số của lệnh này.
SQL Server 2000
24/26
- Gõ lệnh sau và nhấn phím Enter:
- Bcp SaleDb NewData in c:\BaiTapSQL\NewData.txt –c –t”,” –r\n /e
c:\BaiTapSQL\NewData.err –b250 –m50 –T –h “TABLOCK”

- Quay lại cửa sổ Query Analyzer, dùng câu lệnh SELECT * FROM Products và
quan sát kết quả.
b. b. Đưa danh sách các products trong NorthWind thành tập tin Sanpham.txt
2. Khởi động Query Analyzer, dùng câu lệnh Bulk Insert để thực hiện nội dung các mẫu
tin trong Newdata.txt vào SQL Server trong CSDL SalesDB thành bảng
SanPhamMoi.

BÀI TẬP 12
Giả sử ngoài CSDL do SQL server hỗ trợ, còn có CSDL SalesDB, Movies, QLSV Bạn
tạo login chỉ có quyền được cho (không được có quyền cao hơn), tạo xong bạn phải
đăng nhập vào SQL Server bằng chính login vừa t
ạo, thực hiện kiểm tra quyền bằng
cách thực hiện các câu lệnh ứng với quyền được phép và các câu lệnh ứng với quyền
không được phép.

Phần 1: Nghiên cứu và trả lời các câu hỏi sau
1. SQL Server hỗ trợ bao nhiêu chế độ chứng thực? Sự khác biệt? Để thay đối chế độ
chứng thực của một thể hiện SQL Server, bạn phải thực hiện như thế
nào?
2. Cho biết logins, users là gì?
3. Cho biết Roles là gì? Có mấy loại, mức độ như thế nào? Liệt kê các Roles mà SQL
Server có hỗ trợ, nếu bạn là thành viên của Roles đó thì bạn có quyền hạn thư thế
nào? Cho biết Permissions là gì?

Phần 2: Tạo các Roles, Logins, gán các quyền bằng thao tác trong CS Enterprise
Manager.
1. Tạo login dạng SQL Server Authentication
a. Tạo một login có tên là tên của bạn, login có:
 Chế độ chứng thực là SQL Server Authentication, password tuỳ ý, CSDL mặc
định là SalesDB.

 Không thuộ
c Server Roles nào cả
 Chỉ cho truy xuất đến duy nhất CSDL là SalesDB và không thuộc Database Roles
nào cả ngoại trừ Public
Æ Kiểm tra:
- Ở Enterprise Manager, kiểm tra xem tên login của bạn có nằm trong nhánh
Security\Login không? kiểm tra xem tên login của bạn có năm trong nhánh User
của CSDL SalesDB không? Xem properties của nó.
- Kết nối vào Query Analyzer bằng login vừa tạo
- Trong mục database bạn có thể nhìn thấy được những database nào? Tại sao?
- Dùng câu lệnh SELECT … FROM… để xem các mẫu tin trong bảng SANPHAM,
bạn xem được không? Tại sao?
b. Hiệu chỉnh login ở trên, cho phép login thuộc database Roles tên là db_DataReader
trong CSDL SalesDB
SQL Server 2000
25/26
Æ Kiểm tra:
- Dùng câu lệnh SELECT … FROM… để xem các mẫu tin trong bảng SANPHAM,
bạn xem được không? Tại sao?
- Dùng câu lệnh INSERT … VALUES để chèn một mẫu tin mới vào bảng
SANPHAM, bạn có chèn được không? Tại sao? Muốn chèn được bạn phải làm
gì? Thực hiện thử xem sao.
c. Tương tự như vậy, lần lược tìm hiểu các database Roles còn lại.
2. Tạo login dạng Windows Authentication
a. Quay về hệ điều hành tạo một local user account hoặ
c domain user account được phép
kết nối đến máy Server của SQL Server. User account này có tên là Nhanvien1.
b. Cho phép Nhanvien1 trở thành login của SQL Server, login này chỉ thuộc vào
database Roles là db_datareader của CSDL là SaledsDB. (Lưu ý: phải chọn Windows
Authentication)

c. Bạn hãy thử kết nối Server thông qua công cụ Query Analyzer bằng login vừa tạo và
kiểm tra quyền của login đối với SalesDB. (Hướng dẫn: đóng hết các ứng dụng đang
chạy, log off user hiện kết nối đến máy, log on vào máy bằng user account vừa tạo,
kết nố
i vào Query Annalyzer bằng login)
3. Login được tạo ở câu 1 và câu 3 có thể thực hiện tạo được Table, view, … trong CSDL
SalesDb hay không? Muốn tạo được cần có điều gì?
4. Tạo một Database Role có tên là ThuNgan của CSDL SalesDB, Role này có quyền hạn
như sau:
- Được phép chèn, cập nhật dữ liệu trong hai bảng HoaDon và CT_HoaDon
- Chỉ được phép xem (Select) trên các bảng còn lại
5. Tạo 3 login dạng SQL Server Authentication, có tên lần lược là ThuNgan1, ThuNgan2,
ThuNgan3. Các Login này chỉ thuộc duy nhất DataBase Role là ThuNgan đã tạo ở trên.
6. Tạo 3 login dạng SQL Serevr Authentication, có tên lần lược là QuanLyKho1,
QuanLyKho2, QuanLyKho3. Các login này có cùng một quyền hạn là được phép chèn,
xóa dữ liệu trên bảng SanPham; cập nhật duy nhất cột SLTon trong bảng SanPham. Các
bảng khác chỉ được xem.
7. Bạn chọn một giải pháp đơn giản nhất để cho phép các login đã tạo ở trên được phép xem
thông tin trong bảng NhanVien.
8. Tạo hai login thuộc dạng SQL Server Autehtication, có tên lần lược là
PhatTrien_UngDung1, PhatTrien_UngDung2. Các login này có các quyền như sau:
- Được phép tạo các đối tượ
ng của database
- Được phép truy xuất và hiệu chỉnh các đối tượng database

Phần 2: Tạo các Roles, Logins, gán các quyền bằng các thủ tục hệ thống.
1. Tạo một login dạng Windows Authentication có tên là GD_KinhDoanh1.
2. Tạo hai login dạng SQL Server Authentication tên là PGD_KinhDoanh2 và
GD_HanhChinh1 có password tùy ý, CSDL truy xuất đến là SalesDB.
3. Cho phép cả ba login trên được truy xuất đến SalesDB, Movie, QLSV.

4. Theo bạn giám đốc kinh doanh nên có những quyền hạn như thế nào trong SalesDB? Bạn
hãy tạo một user-defined role với tên là GiamDocKinhDoanh có các quyền hạn này. Thực
hiệ
n thêm 3 login trên thành thành viên của role GiamDocKinhDoanh.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×