Chương 7
Lập trình T_SQL
Nội dung
Căn bản về lập trình T_SQL
Thủ tục và Hàm
Transaction
Raiserror
Trigger
Căn bản về lập trình T_SQL
Qui tắc định danh
Tham chiếu đến một đối tượng
server.database.owner.object
Các kiểu dữ liệu trong SQL Server
Batch và Script
Biến cục bộ và toàn cục
Cấu trúc điều khiển if, while
Khối lệnh begin … end
Biểu thức case
Batch và Script
Batch là một tập hợp các lệnh tạo thành một
nhóm và được xem như một đơn vị thực thi
Các lệnh Create phải được đặt trong một batch đơn
Script là 1 chuỗi các batch được kết hợp và
lưu trữ trong cùng 1 file
Lệnh GO được dùng để xác định việc kết thúc của 1
batch bên trong 1 script.
File .sql
Batch và Script
Script sau có 3 batch
USE QLSach
GO /* đánh dấu kết thúc batch thứ 1*/
CREATE VIEW vwNhanvien AS
SELECT * FROM Nhanvien
GO /* đánh dấu kết thúc batch thứ 2 */
SELECT * FROM vwNhanvien
GO /* đánh dấu kết thúc batch thứ 3 */
Biến
Trong Transact SQL, có 2 loại biến:
Biến cục bộ
Local variable hay user-defined variables )
Biến toàn cục
Global variables
Biến cục bộ
Tên biến bắt đầu bằng @
Phạm vi hoạt động của biến : bắt đầu từ vị trí
khai báo đến khi kết thúc batch, hay kết thúc
procedure, function
Khai báo biến
DECLARE @variable_name data_type
Có thể khai báo nhiều biến trong một lệnh declare
Biến cục bộ
Gán giá trị vào biến: 2 cách
VD1
DECLARE @Charge int //khai báo biến
SET @Charge = 10 //gán biến
VD2
DECLARE @SL int //khai báo biến
SELECT @SL = Sum(SoLuong) // gán biến
From HangHoa Where Year(NgayNhap) = 2004
VD3
DECLARE @SL int
SET @SL = (SELECT Sum(SoLuong)
From HangHoa Where Year(NgayNhap) = 2004 )
Biến cục bộ
Gán giá trị vào biến: 2 cách
VD4
DECLARE @SL int //khai báo biến
SELECT @SL = SoLuong // gán biến
From HangHoa
VD4
DECLARE @a int, @b int //khai báo nhiều biến
SELECT @a = 10 , @b = 100 //gán nhiều biến
Biến cục bộ
Xuất biến : 2 cách
Declare @SL int
Select @SL=Sum(SoLuong)
From HangHoa
Where Year(NgayNhap) = 2004
Print @SL
Print ‘tổng sl bán: ’ + cast(@SL as varchar(30))
Select @SL
Select ‘tổng sl bán năm 2004 là ’
+ cast(@SL as varchar(30))
Biến toàn cục
Trong SQL Server, biến toàn cục bản chất là
các hàm hệ thống
Tên bắt đầu bằng @@
Một số biến toàn cục
@@version
@@rowcount
@@trancount
@@identity
@@error
Cấu trúc điều khiển
Cấu trúc if …else
Cấu trúc while
Biểu thức Case
Cấu trúc if
VD1
declare @tb int
select @tb = avg(year(ngaysinh)) from nhanvien
if @tb <=35
print ‘young leaders’
else
print ‘old leaders’
Cấu trúc if (tt)
VD2
if (select avg(year(ngaysinh))
from nhanvien) <=35
print ‘young leaders’
else
print ‘old leaders’
Cấu trúc if (tt)
VD3
Declare @masach char(5), @dgnew float
Set @masach = ‘S0001’
if (Select slton from dmsach where masach = @masach) >=100
Select @dgnew = dongia*0.7
from dmsach where masach = @masach
else
if (Select slton from dmsach where masach = @masach) >=50
Select @dgnew = dongia*0.8
from dmsach where masach = @masach
else
Select @dgnew = dongia*0.9
from dmsach where masach = @masach
If và Case
VD1
if (select max(soluong) from CTHD)>100
print 'ok'
else
print ‘not ok'
VD2
select case
when (select max(soluong) from CTHD)>100 then 'ok'
else ‘not ok'
end
Case
Dùng select để xuất giá trị của biểu thức Case
VD1
Select Manv, Hoten,
(case phai
when ‘nam’ then ‘Mr. ’ + Hoten
when ‘nữ’ then ‘Mrs. ’ + Hoten
end ) as TenGD
From Nhanvien
Case (tt)
VD2.a : dạng 1 của CASE
Select (case phai
when ‘nam’ then ‘Mr. ’
when ‘nữ’ then ‘Mrs. ’
end ) + Hoten
From Nhanvien
Case (tt)
VD2.b : dạng 2 của CASE
Select (case
when phai = ‘nam’ then ‘Mr. ’
when phai = ‘nữ’ then ‘Mrs. ’
end ) + Hoten
From Nhanvien
Case (tt)
VD3
select case
when (select avg(soluong) from CTHD)>100
then ‘không khuyến mãi’
when (select avg(soluong) from CTHD)>40
then ‘cần khuyến mãi’
else ‘cần hỗ trợ vốn'
end
Có thể sử dụng biến trung gian
Set @slmua = (select avg(soluong) from CTHD)
While
VD:
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear'
Thủ tục & Hàm
Chức năng
Các lệnh
Tạo, sửa, xóa, xem thông tin
Các ví dụ
Lợi ích
Dùng thủ tục (stored procedure) trong SQL Server
tốt hơn dùng các chương trình T-SQL được lưu trữ
trên client:
Cho phép lập trình thủ tục
có thể tạo thủ tục 1 lần, lưu trữ nó trong database, và
gọi nó bất kỳ lúc nào cần dùng trong chương trình.
Cho phép thực thi nhanh hơn
Có thể giảm lưu lượng mạng
Có thể được dùng như cơ chế bảo mật
Thủ tục - Store procedure
Gồm các loại
System Store Procedure
Lưu trong Master DB
Có tên bắt đầu sp_
Thực hiện các tác vụ hệ thống
User Defined Store Procedure
Lưu trữ trong DB của người dùng
Temporary Store Procedure
Lưu trữ trong Tempdb DB
System Store Procedure
Một số System Store Procedure
sp_helpDB
Sp_help
Sp_helpconstraint
Sp_rename
Sp_helptext
Sp_procOption
…