Transcript PPT

NỘI DUNG

KHUNG NHÌN (VIEW)

THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)

TRIGGER

HÀM CỦA NGƯỜI DÙNG (USER DEFINED
FUNCTION - UDF)
NỘI DUNG





Định nghĩa
Câu lệnh
Mục đích
Cập nhật dữ liệu thông qua View
Mã hóa View
Định nghĩa VIEW
View là bảng không chứa dữ liệu, nó chỉ là truy
vấn kết hợp dữ liệu từ 1 hay nhiều bảng có quan
hệ với nhau và được lưu thành một đối tượng của
SQL SV
 NSD có thể áp dụng ngôn ngữ thao tác dữ liệu
trên các View giống như Table.

Định nghĩa VIEW
SQL Server
SELECT
FROM
*
nv_kinhdoanh;
USER_VIEWS
nv_kinhdoanh
SELECT manv, hoten,luong
FROM
NHANVIEN
WHERE ma_phong = ‘KDA’;
NHANVIEN
Câu lệnh tạo VIEW
CREATE VIEW <Tên_View>
[(<danh sách tên cột>) ]
[WITH ENCRYPTION]
AS
<Câu lệnh SELECT>
[with check option]
Câu lệnh tạo VIEW
Ví dụ 1: tạo View nv_kinh doanh
CREAT VIEW nv_kinhdoanh
AS
SELECT Manv, Hoten, Luong
FROM NHANVIEN
* Sử dụng View:
SELECT * FROM NV_KINHDOANH
Câu lệnh tạo VIEW
Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)
CREAT VIEW nv_tre (Manv, Hoten, Tuoi)
AS
SELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh)
FROM NHANVIEN
WHERE Year(Getdate()) – Year(Ngaysinh) <= 35
* Sử dụng View:
SELECT * FROM NV_TRE
 Nếu một thuộc tính trong View được xây dựng từ một
biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.
Mục đích dùng VIEW
Hạn chế tính phức tạp của dữ liệu đối với NSD
đơn giản.
 Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD
và sử dụng trong thiết kế báo cáo.
 Hạn chế quyền truy cập dữ liệu của NSD.
 View dùng để trình bày các thông tin dẫn xuất.

Cập nhật dữ liệu thông qua View
View định nghĩa dữ liệu trên một bảng thì
có thể dùng Insert
 Nếu trong định nghĩa View có chứa mệnh
đề Inner join thì không thể dùng các thao tác
Insert hay Delete để thay đổi dữ liệu
 Nếu trong định nghĩa View có chứa mệnh
đề With check option thì chỉ những bản ghi
thỏa mãn điều kiện của View mới được
Insert, Update

Xây dựng View dựa trên View khác




Khi xóa 1 view, mọi view được xây dựng dựa
trên view đó cũng bị xóa.
Có thể dùng thủ tục sp_helptext để xem định
nghĩaView
Tạo View bằng EM
Mã hoá View: dùng WITH ENCRYPTION
 Không thể xem được nội dung View
 Không thể thay đổi lại được
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)



SP được xây dựng từ các câu lệnh T-SQL và được lưu
trú trên SQL server.
Muốn thực hiện một SP, NSD chỉ cần thực hiện một
lời gọi hàm.
Khi SP được chạy lần đầu tiên nó sẽ được biên dịch
qua 5 bước và sinh ra một mô hình truy vấn. Mô hình
này sẽ được đặt trong một CSDL của SQL server, lần
sau chạy lại thủ tục sẽ không phải dịch lại nữa.
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Năm bước biên dịch thủ tục:
Thủ tục được phân tích ra thành nhiều phần
 Kiểm tra sự tồn tại của các đối tượng (view, table, …) mà thủ
tục tham chiếu tới.
 Lưu trữ tên thủ tục vào bảng sysobject, lưu trữ các mã lệnh
của thủ tục vào bảng syscomments.
 Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng
sysprocedure
 Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và
được tối ưu thành một kế hoạch thủ tục và chạy  tiết kiệm
thời gian tái phân tích, biên dịch cây truy vấn mỗi khi chạy
thủ tục.

THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Trong một phiên làm việc, nếu SP được thực hiện, nó
sẽ được lưu trữ vào vùng nhớ đệm. Những lần sau nếu
SP được gọi thực hiện lại thì nó sẽ được đọc trực tiếp
ra từ vùng nhớ đệm  nâng cao hiệu suất chạy truy
vấn.
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Cú pháp lệnh tạo SP:
CREATE PROC[EDURE] <tên SP>
[@ <tên tham số 1> <kiểu DL>
[= <giá trị>] [OUTPUT], . . .]
[WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION]
AS
<các câu lệnh SQL, câu lệnh điều khiển, . . .>
Giải thích:
=<giá trị>: gán giá trị ban đầu cho tham số
OUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa
ra bên ngoài thủ tục.
Ví dụ
-
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Thực hiện thủ tục:
EXEC <tên SP>
Thay đổi thủ tục
ALTER PRO[CEDURE] . . .

Xóa thủ tục

DROP PRO[CEDURE] <tên SP>

Bó thủ tục
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Sử dụng tùy chọn RECOMPILE trong câu lệnh CREATE
PRO:
Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiện
 Khi biên dịch lại các thông tin mới của SP được cập nhật và
tối ưu lại.


Sử dụng tùy chọn RECOMPILE trong câu lệnh EXEC

Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại
kế hoạch thực thi mới của nó vào vùng nhớ đệm.
Biên dịch lại tất cả các thủ tục của bảng:
EXEC sp_recompile <tên bảng>

THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Ví dụ:
USE qlnv;
SP này như một view có tham số!
GO
CREATE PROC DS_Phong
@BienMaPhong CHAR (3)
AS
SELECT Manv, HoTen, NgaySinh
FROM NhanVien
WHERE MaPhong=@BienMaPhong
GO
Exec DS_Phong 'KDA'

Ví dụ:
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)
USE qlnv;
GO
CREATE PROC Soluong_Phong
@BienMaPhong CHAR (3),
@SL int OUTPUT
AS
SELECT @SL = COUNT (*)
FROM NhanVien
WHERE MaPhong=@BienMaPhong
GO
-- Thuc hien thu tuc luu tru
DECLARE @dem INT; DECLARE @phong CHAR(3);
SET @phong='KDA';
EXEC Soluong_Phong @phong, @dem OUTPUT
--Hoac
EXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUT
PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))
--Xoa thu tuc luu tru
DROP PROC Soluong_Phong
THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)

Ví dụ: (Thu tuc luu tru voi tham so mac dinh)
CREATE PROC Soluong_Phong_Default
@BienMaPhong CHAR (3)='KDA',
@SL int OUTPUT
AS
SELECT @SL = COUNT (*)
FROM NhanVien
WHERE MaPhong=@BienMaPhong
GO
DECLARE @dem INT;
EXEC Soluong_Phong_Default @SL=@dem
EXEC Soluong_Phong_Default 'QTA', @dem
Create proc XepLoaiSV @MaSV varchar(10),
THỦ
LƯU@XL
TRÚ
@DTB TỤC
float output,
nvarchar(20) output
As
(STORE PROCEDURE)
Set @DTB = (Select avg(Diem) from KetQua Kq
Where MaSV = @MaSV and not exists (
select * from KetQua Kq1
where Kq1.MaSV = @MaSV and Kq1.MaMH=Kq.MaMH
and Kq1.LanThi > Kq.LanThi
)
)
If @DTB >= 9
Set @XL = N’Xuât sac’
Else if @DTB >= 8
Set @XL = N’Gi~i’
Else if @DTB >= 7
Set @XL = N’Khá’
Else if @DTB >= 5
Set @XL = N’Trung bình’
Else
Set @XL = N’Yêu’
Go
HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
Cú pháp câu lệnh:
CREATE FUNCTION <tên hàm>
([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])
RETURNS <kiểu vô hướng>|<table>
[WITH ENCRYPTION]
AS
BEGIN
[<các câu lệnh>]
RETURN <giá trị vô hướng>| (<câu lệnh SELECT>)

HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
--Ham vo huong
CREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )
RETURNS int
AS
BEGIN
DECLARE @SL int;
SELECT @SL = COUNT (*)
FROM NhanVien
WHERE MaPhong=@BienMaPhong ;
RETURN (@SL);
END
--Su dung ham (Ham xuat hien trong bieu thuc)
SELECT dbo.Ham_Soluong_Phong('KDA');
SELECT MaPhong, count (*)
FROM NhanVien
GROUP BY MaPhong
HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')
HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)
--Ham cho ket qua la mot bang
CREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))
RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)
BEGIN
INSERT INTO @kq
SELECT Manv, HoTen, NgaySinh
FROM NhanVien
WHERE MaPhong=@BienMaPhong
RETURN
END
-- Su dung ham tra ket qua bang nhu la TABLE
SELECT *
FROM Ham_DS_Phong ('QTA')
HÀM CỦA NSD
(USER DEFINED FUNCTIONS-UDFs)

UDFs giống như SP nhưng khác ở các điểm sau:
UDF
SP
- Giá trị các tham số không
- Có thể đưa giá trị của tham
được truyền ra ngoài.
số ra ngoài bằng thuộc tính
- Trả ra một giá trị bằng mệnh
OUTPUT
đề RETURN
- Có thể trả về một giá trị vô - Chỉ trả về kiểu DL giá trị
hướng hoặc một bảng dữ
kiểu nguyên
liệu.
Nội dung

Khái niệm về trigger

Câu lệnh tạo trigger

Các loại trigger

Ứng dụng của trigger

Sửa, xóa trigger
Khái niệm về trigger




Thủ tục lưu trú (Stored Procedure) đặc biệt
Triger tự động được chạy mỗi khi có một
hành động liên quan đến nó xảy ra
Triger không có tham số, không trả ra giá
trị như SP bình thường.
Các loại trigger: Insert trigger, Delete
trigger, Update trigger, trigger tổng hợp.
Cú pháp câu lệnh tạo trigger
CREATE TRIGGER <tên triger>
ON <tên bảng>|<tên view>
[WITH ENCRYPTION]
{
{FOR | AFTER| INSTEAD OF}
<INSERT [, UPDATE] [, DELETE]>
}
AS
<câu lệnh SQL>
Trigger chèn (Insert trigger): định nghĩa



Tự động được thực hiện mỗi khi bản ghi
mới được chèn vào bảng gắn với nó
Một bảng tạm Inserted sẽ được sinh ra
Bản ghi cần chèn sẽ được ghi vào bảng cơ
sở và bảng Inserted
Trigger chèn: ví dụ
CREATE TRIGGER trInsNV
ON NHANVIEN
FOR INSERT
AS
RAISERROR('%d hang da duoc them vao bang
NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có bản
ghi mới được chèn vào bảng NHANVIEN
Trigger xóa: ví dụ
CREATE TRIGGER trDelNV
ON NHANVIEN
FOR DELETE
AS
RAISERROR('%d hàng bị xóa trong bảng
NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có một
hoặc nhiều bản ghi bị xóa ở bảng NHANVIEN
Trigger cập nhật (Update trigger): ví dụ
CREATE TRIGGER trUpNV
ON NHANVIEN
FOR UPDATE
AS
RAISERROR('%d %d hàng đã được sửa ở bảng bảng
NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có một
câu lệnh Update được thực hiện trên bảng
NHANVIEN.
Trigger tổng hợp: ví dụ
CREATE TRIGGER trIns_UpNV
ON NHANVIEN
FOR INSERT, UPDATE
AS
RAISERROR('%d hàng đã được thêm hoặc sửa ở
bảng NHANVIEN', 0, 1,@@rowcount)
Trigger Instead of

cho phép cập nhật DL các bảng thông qua
view có liên kết nhiều bảng
Ứng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệu
CREATE TRIGGER trDelNV
ON NHANVIEN
FOR DELETE
AS
RAISERROR('%d hang bi xoa trong bang NHANVIEN', 0,
1,@@rowcount)
-----------CREATE TRIGGER trDelPhong
ON PHONG
FOR DELETE
AS
DELETE NHANVIEN FROM DELETED WHERE
DELETED.MAPHONG =NHANVIEN.MAPHONG
Ứng dụng: Đóng gói quy tắc nghiệp vụ
CREATE TRIGGER trInsNV_PHONG
ON NHANVIEN
FOR INSERT
AS
UPDATE PHONG SET SONV = SONV+1
WHERE PHONG.MAPHONG = (SELECT
MAPHONG FROM INSERTED)
Một số chú ý khi dùng trigger



Một bảng có nhiều trigger
Mỗi một trigger có tên duy nhất
Trong trigger thường dùng mệnh đề IF
EXISTS
Xóa, sửa trigger


Xoá trigger
DROP TRIGGER <tên trigger>
Sửa trigger
ALTER TRIGGER <tên trigger> . . .

Xem lại định nghĩa của trigger: sp_helptext

Tạo trigger bằng EM