View SP Trigger Udf

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 42

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
Định nghĩa
nghĩa VIEW
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'


THỦ TỤC LƯU TRÚ
(STORED PROCEDURE)
 Ví dụ:
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 Ủ TỤC
@DTB LƯU@XL
float output, TRÚ
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

You might also like