11
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
SQL Server
22
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Lập trình v i CSDL
5
33
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Biến cục bộ
44
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Khai báo biến cục bộ
• Dùng để l u tr các giá tr t m th i trong quá trình
tính toán
 Biến phải có kiểu dữ liệu
 Biến muốn sử dụng trong một batch phải khai báo trước
DECLARE @Tên_biến Kiểu_dữ_liệu [, ...]
Ví dụ :
DECLARE @Tongsldat INT, @Hotenncc CHAR(50)
DECLARE @Ngayxh DATETIME
55
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Gán giá tr cho biến
SET @Biến = Giá_trị
SET @a = 5
Select @Biến = Tên_Cột From Tên_Bảng
Select @ConLai = TonCuoiKy From TonKho Where
MaVTu = ‘VT010’ And NamThang = ‘200402’
Sử dụng lệnh SET hoặc SELECT
66
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Xem giá tr hiện hành của biến
• Lệnh PRINT
Print @Biến
Print @A
• Khi có kết hợp với chuỗi, phải đổi kiểu dữ liệu sang kiểu
chuỗi bằng hàm CAST hay CONVERT
Print ‘Giá trị của @A ‘ + cast(@A as char(4))
77
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Ph m vi ho t động của biến
• Một biến chỉ có ph m vi ho t động cục bộ
 Trong một Batch
 Trong một Stored Procedure hay Trigger
DECLARE @Ngaydhgn DATETIME
SELECT @Ngaydhgn=MAX(NGAYDH)
FROM DONDH
GO
PRINT 'Ngày đặt hàng gần nhất: ' +
CONVERT(CHAR(12),@Ngaydhgn)
GO
88
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Biến hệ thống
99
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Ý nghĩa sử dụng
• Cung cấp các thông tin hệ thống nh
 Phiên bản SQL Server
 Số dòng dữ liệu vừa được xử lý bởi câu lệnh
 Mã lỗi
 Số lượng kết nối
 Tình trạng cursor
 …
• Không cần khai báo
 Biến do SQL Server định sẵn
 Tên bắt đầu bởi @@
1010
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Một vài biến hệ thống th ng dùng
• @@RowCount
 Tổng số mẩu tin được tác động của câu lệnh truy vấn gần nhất.
• @@Error
 Số mã lỗi của câu lệnh thực hiện gần nhất
 Khi một câu lệnh thực hiện thành công thì giá trị là 0.
• @@Fetch_Status
 Trạng thái của việc đọc dữ liệu trong bảng theo cơ chế từng mẩu
tin (cursor).
 Khi đọc dữ liệu của mẩu tin thành công thì giá trị là 0.
1111
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các toán tử
1212
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Toán tử số h c
Ký hiệu Ý nghĩa
+ Thực hiện phép cộng hai số
- Thực hiện phép trừ hai số.
* Thực hiện phép nhân hai số.
/ Thực hiện phép chia hai số.
% Thực hiện phép chia lấy phần dư.
1313
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Toán tử nối chuỗi
• Sử dụng dấu + làm toán tử nối chuỗi
SELECT 'Hello' + ' ' + 'The World!'
SELECT 'Ngày đặt hàng D007 là: '
+ CAST(NGAYDH AS CHAR(11))
FROM DONDH
WHERE SODH='D007'
1414
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Toán tử so sánh
Ký hiệu Ý nghĩa
= Thực hiện phép so sánh bằng.
> Thực hiện phép so sánh lớn hơn.
< Thực hiện phép so sánh nhỏ hơn.
>= Thực hiện phép so sánh lớn hơn hoặc bằng.
<= Thực hiện phép so sánh nhỏ hơn hoặc bằng.
<> Thực hiện phép so sánh khác.
!= Thực hiện phép so sánh khác.
!> Thực hiện phép so sánh không lớn hơn.
!< Thực hiện phép so sánh không nhỏ hơn.
1515
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Toán tử luận lý
• Sử dụng các toán tử thông th ng AND,
OR, NOT vẫn dùng trong các câu SQL
SELECT * FROM VATTU
WHERE (DVTINH='Bộ' AND PHANTRAM>10)
OR (DVTINH='Cái' AND
PHANTRAM>20)
1616
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cấu trúc điều khiển
1717
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cấu trúc rẽ nhánh IF...ELSE
IF Biểu_thức_luận_lý
Câu_lệnh1 | Khối_lệnh1
[ ELSE
Câu_lệnh2 | Khối_lệnh2 ]
1818
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Ví Dụ :
IF (SELECT COUNT(*) FROM CTPXUAT WHERE SLXUAT>4) > 0
BEGIN
PRINT 'Danh sách các hàng hóa bán với số lượng > 4'
SELECT CTPX.MAVTU, TENVTU, SLXUAT
FROM CTPXUAT CTPX INNER JOIN VATTU VT
ON VT.MAVTU=CTPX.MAVTU
WHERE SLXUAT>4
END
ELSE
PRINT 'Chưa bán hàng hóa nào với số lượng >4'
1919
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cú pháp If Exists
IF EXISTS (SELECT * FROM CTPXUAT WHERE SLXUAT>4)
BEGIN
PRINT 'Danh sách các hàng hóa bán với số lượng > 4'
SELECT CTPX.MAVTU, TENVTU, SLXUAT
FROM CTPXUAT CTPX INNER JOIN VATTU VT ON VT.MAVTU=CTPX.MAVTU
WHERE SLXUAT>4
END
ELSE
PRINT 'Chưa bán hàng hóa nào với số lượng >4'
IF EXISTS (Câu_lệnh_SELECT)
Câu_lệnh1 | Khối_lệnh1
[ ELSE
Câu_lệnh2 | Khối_lệnh2 ]
2020
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cấu trúc lặp WHILE
DECLARE @Songuyen INT
SET @Songuyen=100
WHILE (@Songuyen<110)
BEGIN
PRINT 'Số nguyên : ' + CONVERT(CHAR(3), @Songuyen)
SET @Songuyen = @Songuyen + 1
END
WHILE Biểu_thức_luận_lý
BEGIN
Các_lệnh_lặp
END
2121
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Sử dụng biến kiểu d liệu
cursor
2222
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Khái niệm về cursor
• Các lệnh của SQL Server làm việc trên một
nhóm nhiều mẩu tin
• Cursor là cấu trúc giúp làm việc v i từng mẩu
tin t i một th i điểm
 Khai báo cursor như một câu lệnh SELECT
 Có thể di chuyển giữa các mẩu tin trong cursor để làm
việc
 Có thể dùng cursor để cập nhật dữ liệu (Update, Delete)
2323
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các b c sử dụng kiểu d liệu cursor
• Định nghĩa biến kiểu cursor bằng lệnh DECLARE
 Có hai loại cursor: Local, Global
 Cách di chuyển mẩu tin trong cursor: Forward only, scroll
 Cách quản lý dữ liệu của cursor: static, dynamic, keyset
• Sử dụng lệnh OPEN để mở ra cursor đã định nghĩa trước đó
• Đọc và xử lý trên từng dòng dữ liệu bên trong cursor
 Sử dụng biến @@Fetch_status
 Các lệnh Fetch và cấu trúc while
• Đóng cursor lại bằng lệnh CLOSE và DEALLOCATE
 Sau khi close, có thể mở lại
 Deallocate: hủy cursor khỏi bộ nhớ
2424
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cú pháp Declare
DECLARE Tên_cursor CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | DYNAMIC | KEYSET]
[READ_ONLY | SCROLL_LOCK]
FOR Câu_lệnh_SELECT
[FOR UPDATE [OF Danh_sách_cột_cập_nhật]]
DECLARE cur_Vattu CURSOR
DYNAMIC
FOR
SELECT * FROM VATTU
2525
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cú pháp Open
OPEN Tên_cursor
DECLARE cur_Vattu CURSOR
DYNAMIC
FOR
SELECT * FROM VATTU
OPEN cur_Vattu
2626
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Cú pháp FETCH
FETCH [NEXT | PRIOR | FIRST | LAST
| ABSOLUTE n | RELATIVE n]
FROM Tên_cursor
[INTO Danh_sách_biến]
 Absolute n: Đọc dòng thứ n trong cursor
 Relative n: Đọc dòng thứ n kể từ vị trí hiện hành
2727
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Ví dụ hoàn chỉnh
--1. Khai báo biến cursor
DECLARE cur_Vattu CURSOR KEYSET
FOR SELECT * FROM VATTU
WHERE MAVTU LIKE 'TV%'
ORDER BY MAVTU
--2. Mở cursor
OPEN cur_Vattu
--3. Đọc dữ liệu
FETCH NEXT FROM cur_Vattu
WHILE @@FETCH_STATUS = 0
BEGIN
-- Xử lý dòng mới vừa đọc được
-- Thực hiện đọc tiếp các dòng kế
FETCH NEXT FROM cur_Vattu
END
--4. Đóng cursor
CLOSE cur_Vattu
DEALLOCATE cur_Vattu
2828
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các hàm th ng dùng
2929
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các hàm chuyển đổi kiểu d liệu
Một hàm của SQL Server có thể sử dụng ở bất cứ đâu thay
cho một giá trị cụ thể
• Đổi một số thành chuỗi
 STR (Số_thực, Số_ký_tự [, Số_lẻ])
• Đổi kiểu dữ liệu
 CAST (Biểu_thức AS Kiểu_dữ_liệu)
• Đổi kiểu dữ liệu và định dạng
 CONVERT (Kiểu_dữ_liệu, Biểu_thức [, Định_dạng])
3030
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Một số đ nh d ng chuỗi ngày thông
dụng
yy yyyy Chuỗi kết quả
- 0 hoặc 100 mon dd yyyy hh:miAM (or PM)
1 101 mm/dd/yyyy
2 102 yy.mm.dd
3 103 dd/mm/yy
5 105 dd-mm-yy
6 106 dd mon yy
8 108 hh:mm:ss
9 109 mon dd yyyy hh:mi:ss:mmmAM (or PM)
10 110 mm-dd-yy
11 111 yy/mm/dd
12 112 yymmdd
…
Print convert(nvarchar(50), getdate(), 5) 23-05-09
Print convert(nvarchar(50), getdate(), 105) 23-05-2009
3131
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các hàm ngày gi
• Cộng ngày
 DATEADD (Đơn_vị, Con_số, Ngày_chỉ_định)
• So sánh hai biến ngày
 DATEDIFF (Đơn_vị, Ngày1, Ngày2)
• Lấy tên ngày, tháng, năm
 DATENAME (Đơn_vị, Ngày)
• Thời điểm hiện hành
 GETDATE()
• Lấy một thành phần ngày, giờ trong biến ngày
 DATEPART (Đơn_vị, Ngày)
• Lấy ngày, tháng, năm của biến ngày
 DAY (Ngày)
 MONTH (Ngày)
 YEAR (Ngày)
3232
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Đơn_v (Thành phần của ngày) Ch viết tắt
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms
3333
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các hàm toán h c
• Lấy trị tuyệt đối
 ABS (Biểu_thức_số)
• Hằng số Pi
 PI()
• Luỹ thừa
 POWER (Biểu_thức_số, Số_mũ)
• Lấy số ngẫu nhiên
 RAND ([Số_nguồn])
• Làm tròn số
 ROUND (Biểu_thức_số, Vtrí_làm_tròn)
• Dấu của kết quả biểu thức : SIGN (Biểu_thức_số)
• Lấy căn bậc 2 : SQRT (Biểu_thức_số)
3434
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Các hàm xử lý chuỗi
• Hàm viết hoa, th ng
 UPPER (Chuỗi), LOWER (Chuỗi)
• Hàm cắt chuỗi
 LEFT (Chuỗi nguồn, Số_ktự), RIGHT (Chuỗi nguồn, Số_ktự)
 SUBSTRING (Chuỗi nguồn,Vị_trí,Số_ktự)
• Hàm cắt khoảng trắng, t o chuỗi khoảng trắng
 LTRIM (Chuỗi), RTRIM (Chuỗi), SPACE (N)
• Hàm t o chuỗi lặp
 REPLICATE (Chuỗi_lặp, N)
• Chiều dài chuỗi
 LEN (Chuỗi)
• Đảo chuỗi
 REVERSE (Chuỗi)
• Tìm và thay thế chuỗi
 REPLACE (Chuỗi nguồn, Chuỗi_tìm, Chuỗi_thay_thế)
• Đổi từ số thành ký t và ng ợc l i
 CHAR (Số) , ASCII(Ký_tự)
3535
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Xử lý lỗi
3636
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Khối lệnh TRY…CATCH
• Ý nghĩa : Thực hiện các lệnh trong khối TRY, nếu gặp lỗi sẽ chuyển
qua xử lý bằng các lệnh trong khối CATCH
• Cú pháp : BEGIN TRY
{ các câu lệnh }
END TRY
BEGIN CATCH
{ các câu lệnh}
END CATCH
• Các điểm cần lưu ý :
• TRY và CATCH phải cùng lô xử lý
• Sau khối TRY phải là khối CATCH
• Có thể lồng nhiều cấp
3737
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Khối lệnh TRY…CATCH
Ví dụ :
BEGIN TRY
SELECT * FROM BangKhongTonTai;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;
END CATCH
3838
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Một số hàm ERROR th ng dùng
ERROR_NUMBER() : Trả về mã số của lỗi
ERROR_MESSAGE() Trả về chuỗi lỗi
ERROR_SEVERITY() returns the error severity.
ERROR_STATE() returns the error state number.
ERROR_LINE() : Trả về dòng gây ra lỗi
ERROR_PROCEDURE() Trả về tên thủ tục/ trigger gây ra lỗi
3939
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Thủ tục RAISERROR
• Ý nghĩa : Trả thông báo lỗi về cho ứng dụng
• Cú pháp :
• Raiserror(tbao_loi, muc_do, trang_thai [, cac_tham_so] )
Trong đó:
tbao_loi : - mã thông báo lỗi do người dùng định nghĩa trước bằng
sp_addmessage và được lưu trong sys.messages. Giá trị phải lớn hơn
50000.
- chuỗi thông báo lỗi bất kỳ.
muc_do : Số có giá trị từ 025 thể hiện mức độ nghiêm trọng của lỗi.
trang_thai : Số từ 1-127 để xác định vị trí lỗi khi sử dụng cùng một tbao_loi
tại nhiều điểm khác nhau
cac_tham_so : Hỗ trợ cho các tbao_loi cần tham số
4040
TR NG Đ I H C KHOA H C T NHIÊN TP.HCM
TRUNG TÂM TIN H C
Ví dụ sử dụng RAISERROR
…
IF @nPhanTram NOT BETWEEN 0 AND 100
BEGIN
SET @sErrMsg = N‘Tỉ lệ phầm trăm phải nằm trong đoạn [0,100]’
RAISERROR(@sErrMsg, 16, 1)
RETURN
END
…
Msg 50000, Level 16, State 1, Line 6
Tỉ lệ phầm trăm phải nằm trong đoạn [0,100]

Bài 5 : Lập trình với CSDL trong SQL

  • 1.
    11 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C SQL Server
  • 2.
    22 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Lập trình v i CSDL 5
  • 3.
    33 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Biến cục bộ
  • 4.
    44 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Khai báo biến cục bộ • Dùng để l u tr các giá tr t m th i trong quá trình tính toán  Biến phải có kiểu dữ liệu  Biến muốn sử dụng trong một batch phải khai báo trước DECLARE @Tên_biến Kiểu_dữ_liệu [, ...] Ví dụ : DECLARE @Tongsldat INT, @Hotenncc CHAR(50) DECLARE @Ngayxh DATETIME
  • 5.
    55 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Gán giá tr cho biến SET @Biến = Giá_trị SET @a = 5 Select @Biến = Tên_Cột From Tên_Bảng Select @ConLai = TonCuoiKy From TonKho Where MaVTu = ‘VT010’ And NamThang = ‘200402’ Sử dụng lệnh SET hoặc SELECT
  • 6.
    66 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Xem giá tr hiện hành của biến • Lệnh PRINT Print @Biến Print @A • Khi có kết hợp với chuỗi, phải đổi kiểu dữ liệu sang kiểu chuỗi bằng hàm CAST hay CONVERT Print ‘Giá trị của @A ‘ + cast(@A as char(4))
  • 7.
    77 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Ph m vi ho t động của biến • Một biến chỉ có ph m vi ho t động cục bộ  Trong một Batch  Trong một Stored Procedure hay Trigger DECLARE @Ngaydhgn DATETIME SELECT @Ngaydhgn=MAX(NGAYDH) FROM DONDH GO PRINT 'Ngày đặt hàng gần nhất: ' + CONVERT(CHAR(12),@Ngaydhgn) GO
  • 8.
    88 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Biến hệ thống
  • 9.
    99 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Ý nghĩa sử dụng • Cung cấp các thông tin hệ thống nh  Phiên bản SQL Server  Số dòng dữ liệu vừa được xử lý bởi câu lệnh  Mã lỗi  Số lượng kết nối  Tình trạng cursor  … • Không cần khai báo  Biến do SQL Server định sẵn  Tên bắt đầu bởi @@
  • 10.
    1010 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Một vài biến hệ thống th ng dùng • @@RowCount  Tổng số mẩu tin được tác động của câu lệnh truy vấn gần nhất. • @@Error  Số mã lỗi của câu lệnh thực hiện gần nhất  Khi một câu lệnh thực hiện thành công thì giá trị là 0. • @@Fetch_Status  Trạng thái của việc đọc dữ liệu trong bảng theo cơ chế từng mẩu tin (cursor).  Khi đọc dữ liệu của mẩu tin thành công thì giá trị là 0.
  • 11.
    1111 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các toán tử
  • 12.
    1212 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Toán tử số h c Ký hiệu Ý nghĩa + Thực hiện phép cộng hai số - Thực hiện phép trừ hai số. * Thực hiện phép nhân hai số. / Thực hiện phép chia hai số. % Thực hiện phép chia lấy phần dư.
  • 13.
    1313 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Toán tử nối chuỗi • Sử dụng dấu + làm toán tử nối chuỗi SELECT 'Hello' + ' ' + 'The World!' SELECT 'Ngày đặt hàng D007 là: ' + CAST(NGAYDH AS CHAR(11)) FROM DONDH WHERE SODH='D007'
  • 14.
    1414 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Toán tử so sánh Ký hiệu Ý nghĩa = Thực hiện phép so sánh bằng. > Thực hiện phép so sánh lớn hơn. < Thực hiện phép so sánh nhỏ hơn. >= Thực hiện phép so sánh lớn hơn hoặc bằng. <= Thực hiện phép so sánh nhỏ hơn hoặc bằng. <> Thực hiện phép so sánh khác. != Thực hiện phép so sánh khác. !> Thực hiện phép so sánh không lớn hơn. !< Thực hiện phép so sánh không nhỏ hơn.
  • 15.
    1515 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Toán tử luận lý • Sử dụng các toán tử thông th ng AND, OR, NOT vẫn dùng trong các câu SQL SELECT * FROM VATTU WHERE (DVTINH='Bộ' AND PHANTRAM>10) OR (DVTINH='Cái' AND PHANTRAM>20)
  • 16.
    1616 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cấu trúc điều khiển
  • 17.
    1717 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cấu trúc rẽ nhánh IF...ELSE IF Biểu_thức_luận_lý Câu_lệnh1 | Khối_lệnh1 [ ELSE Câu_lệnh2 | Khối_lệnh2 ]
  • 18.
    1818 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Ví Dụ : IF (SELECT COUNT(*) FROM CTPXUAT WHERE SLXUAT>4) > 0 BEGIN PRINT 'Danh sách các hàng hóa bán với số lượng > 4' SELECT CTPX.MAVTU, TENVTU, SLXUAT FROM CTPXUAT CTPX INNER JOIN VATTU VT ON VT.MAVTU=CTPX.MAVTU WHERE SLXUAT>4 END ELSE PRINT 'Chưa bán hàng hóa nào với số lượng >4'
  • 19.
    1919 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cú pháp If Exists IF EXISTS (SELECT * FROM CTPXUAT WHERE SLXUAT>4) BEGIN PRINT 'Danh sách các hàng hóa bán với số lượng > 4' SELECT CTPX.MAVTU, TENVTU, SLXUAT FROM CTPXUAT CTPX INNER JOIN VATTU VT ON VT.MAVTU=CTPX.MAVTU WHERE SLXUAT>4 END ELSE PRINT 'Chưa bán hàng hóa nào với số lượng >4' IF EXISTS (Câu_lệnh_SELECT) Câu_lệnh1 | Khối_lệnh1 [ ELSE Câu_lệnh2 | Khối_lệnh2 ]
  • 20.
    2020 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cấu trúc lặp WHILE DECLARE @Songuyen INT SET @Songuyen=100 WHILE (@Songuyen<110) BEGIN PRINT 'Số nguyên : ' + CONVERT(CHAR(3), @Songuyen) SET @Songuyen = @Songuyen + 1 END WHILE Biểu_thức_luận_lý BEGIN Các_lệnh_lặp END
  • 21.
    2121 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Sử dụng biến kiểu d liệu cursor
  • 22.
    2222 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Khái niệm về cursor • Các lệnh của SQL Server làm việc trên một nhóm nhiều mẩu tin • Cursor là cấu trúc giúp làm việc v i từng mẩu tin t i một th i điểm  Khai báo cursor như một câu lệnh SELECT  Có thể di chuyển giữa các mẩu tin trong cursor để làm việc  Có thể dùng cursor để cập nhật dữ liệu (Update, Delete)
  • 23.
    2323 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các b c sử dụng kiểu d liệu cursor • Định nghĩa biến kiểu cursor bằng lệnh DECLARE  Có hai loại cursor: Local, Global  Cách di chuyển mẩu tin trong cursor: Forward only, scroll  Cách quản lý dữ liệu của cursor: static, dynamic, keyset • Sử dụng lệnh OPEN để mở ra cursor đã định nghĩa trước đó • Đọc và xử lý trên từng dòng dữ liệu bên trong cursor  Sử dụng biến @@Fetch_status  Các lệnh Fetch và cấu trúc while • Đóng cursor lại bằng lệnh CLOSE và DEALLOCATE  Sau khi close, có thể mở lại  Deallocate: hủy cursor khỏi bộ nhớ
  • 24.
    2424 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cú pháp Declare DECLARE Tên_cursor CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | DYNAMIC | KEYSET] [READ_ONLY | SCROLL_LOCK] FOR Câu_lệnh_SELECT [FOR UPDATE [OF Danh_sách_cột_cập_nhật]] DECLARE cur_Vattu CURSOR DYNAMIC FOR SELECT * FROM VATTU
  • 25.
    2525 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cú pháp Open OPEN Tên_cursor DECLARE cur_Vattu CURSOR DYNAMIC FOR SELECT * FROM VATTU OPEN cur_Vattu
  • 26.
    2626 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Cú pháp FETCH FETCH [NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n] FROM Tên_cursor [INTO Danh_sách_biến]  Absolute n: Đọc dòng thứ n trong cursor  Relative n: Đọc dòng thứ n kể từ vị trí hiện hành
  • 27.
    2727 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Ví dụ hoàn chỉnh --1. Khai báo biến cursor DECLARE cur_Vattu CURSOR KEYSET FOR SELECT * FROM VATTU WHERE MAVTU LIKE 'TV%' ORDER BY MAVTU --2. Mở cursor OPEN cur_Vattu --3. Đọc dữ liệu FETCH NEXT FROM cur_Vattu WHILE @@FETCH_STATUS = 0 BEGIN -- Xử lý dòng mới vừa đọc được -- Thực hiện đọc tiếp các dòng kế FETCH NEXT FROM cur_Vattu END --4. Đóng cursor CLOSE cur_Vattu DEALLOCATE cur_Vattu
  • 28.
    2828 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các hàm th ng dùng
  • 29.
    2929 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các hàm chuyển đổi kiểu d liệu Một hàm của SQL Server có thể sử dụng ở bất cứ đâu thay cho một giá trị cụ thể • Đổi một số thành chuỗi  STR (Số_thực, Số_ký_tự [, Số_lẻ]) • Đổi kiểu dữ liệu  CAST (Biểu_thức AS Kiểu_dữ_liệu) • Đổi kiểu dữ liệu và định dạng  CONVERT (Kiểu_dữ_liệu, Biểu_thức [, Định_dạng])
  • 30.
    3030 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Một số đ nh d ng chuỗi ngày thông dụng yy yyyy Chuỗi kết quả - 0 hoặc 100 mon dd yyyy hh:miAM (or PM) 1 101 mm/dd/yyyy 2 102 yy.mm.dd 3 103 dd/mm/yy 5 105 dd-mm-yy 6 106 dd mon yy 8 108 hh:mm:ss 9 109 mon dd yyyy hh:mi:ss:mmmAM (or PM) 10 110 mm-dd-yy 11 111 yy/mm/dd 12 112 yymmdd … Print convert(nvarchar(50), getdate(), 5) 23-05-09 Print convert(nvarchar(50), getdate(), 105) 23-05-2009
  • 31.
    3131 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các hàm ngày gi • Cộng ngày  DATEADD (Đơn_vị, Con_số, Ngày_chỉ_định) • So sánh hai biến ngày  DATEDIFF (Đơn_vị, Ngày1, Ngày2) • Lấy tên ngày, tháng, năm  DATENAME (Đơn_vị, Ngày) • Thời điểm hiện hành  GETDATE() • Lấy một thành phần ngày, giờ trong biến ngày  DATEPART (Đơn_vị, Ngày) • Lấy ngày, tháng, năm của biến ngày  DAY (Ngày)  MONTH (Ngày)  YEAR (Ngày)
  • 32.
    3232 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Đơn_v (Thành phần của ngày) Ch viết tắt year yy, yyyy quarter qq, q month mm, m dayofyear dy, y day dd, d week wk, ww weekday dw hour hh minute mi, n second ss, s millisecond ms
  • 33.
    3333 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các hàm toán h c • Lấy trị tuyệt đối  ABS (Biểu_thức_số) • Hằng số Pi  PI() • Luỹ thừa  POWER (Biểu_thức_số, Số_mũ) • Lấy số ngẫu nhiên  RAND ([Số_nguồn]) • Làm tròn số  ROUND (Biểu_thức_số, Vtrí_làm_tròn) • Dấu của kết quả biểu thức : SIGN (Biểu_thức_số) • Lấy căn bậc 2 : SQRT (Biểu_thức_số)
  • 34.
    3434 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Các hàm xử lý chuỗi • Hàm viết hoa, th ng  UPPER (Chuỗi), LOWER (Chuỗi) • Hàm cắt chuỗi  LEFT (Chuỗi nguồn, Số_ktự), RIGHT (Chuỗi nguồn, Số_ktự)  SUBSTRING (Chuỗi nguồn,Vị_trí,Số_ktự) • Hàm cắt khoảng trắng, t o chuỗi khoảng trắng  LTRIM (Chuỗi), RTRIM (Chuỗi), SPACE (N) • Hàm t o chuỗi lặp  REPLICATE (Chuỗi_lặp, N) • Chiều dài chuỗi  LEN (Chuỗi) • Đảo chuỗi  REVERSE (Chuỗi) • Tìm và thay thế chuỗi  REPLACE (Chuỗi nguồn, Chuỗi_tìm, Chuỗi_thay_thế) • Đổi từ số thành ký t và ng ợc l i  CHAR (Số) , ASCII(Ký_tự)
  • 35.
    3535 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Xử lý lỗi
  • 36.
    3636 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Khối lệnh TRY…CATCH • Ý nghĩa : Thực hiện các lệnh trong khối TRY, nếu gặp lỗi sẽ chuyển qua xử lý bằng các lệnh trong khối CATCH • Cú pháp : BEGIN TRY { các câu lệnh } END TRY BEGIN CATCH { các câu lệnh} END CATCH • Các điểm cần lưu ý : • TRY và CATCH phải cùng lô xử lý • Sau khối TRY phải là khối CATCH • Có thể lồng nhiều cấp
  • 37.
    3737 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Khối lệnh TRY…CATCH Ví dụ : BEGIN TRY SELECT * FROM BangKhongTonTai; END TRY BEGIN CATCH SELECT ERROR_NUMBER() as ErrorNumber, ERROR_MESSAGE() as ErrorMessage; END CATCH
  • 38.
    3838 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Một số hàm ERROR th ng dùng ERROR_NUMBER() : Trả về mã số của lỗi ERROR_MESSAGE() Trả về chuỗi lỗi ERROR_SEVERITY() returns the error severity. ERROR_STATE() returns the error state number. ERROR_LINE() : Trả về dòng gây ra lỗi ERROR_PROCEDURE() Trả về tên thủ tục/ trigger gây ra lỗi
  • 39.
    3939 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Thủ tục RAISERROR • Ý nghĩa : Trả thông báo lỗi về cho ứng dụng • Cú pháp : • Raiserror(tbao_loi, muc_do, trang_thai [, cac_tham_so] ) Trong đó: tbao_loi : - mã thông báo lỗi do người dùng định nghĩa trước bằng sp_addmessage và được lưu trong sys.messages. Giá trị phải lớn hơn 50000. - chuỗi thông báo lỗi bất kỳ. muc_do : Số có giá trị từ 025 thể hiện mức độ nghiêm trọng của lỗi. trang_thai : Số từ 1-127 để xác định vị trí lỗi khi sử dụng cùng một tbao_loi tại nhiều điểm khác nhau cac_tham_so : Hỗ trợ cho các tbao_loi cần tham số
  • 40.
    4040 TR NG ĐI H C KHOA H C T NHIÊN TP.HCM TRUNG TÂM TIN H C Ví dụ sử dụng RAISERROR … IF @nPhanTram NOT BETWEEN 0 AND 100 BEGIN SET @sErrMsg = N‘Tỉ lệ phầm trăm phải nằm trong đoạn [0,100]’ RAISERROR(@sErrMsg, 16, 1) RETURN END … Msg 50000, Level 16, State 1, Line 6 Tỉ lệ phầm trăm phải nằm trong đoạn [0,100]