Upload
june
View
20
Download
3
Embed Size (px)
DESCRIPTION
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU. SQL SERVER. 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). VIEW. KHUNG NHÌN. Bảng ảo. 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. - PowerPoint PPT Presentation
Citation preview
NỘI DUNGNỘI DUNG
KHUNG NHÌN (VIEW)KHUNG NHÌN (VIEW)
THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)THỦ TỤC LƯU TRÚ (STORED PROCEDURE - SP)
TRIGGERTRIGGER
HÀM CỦA NGƯỜI DÙNG (USER DEFINED HÀM CỦA NGƯỜI DÙNG (USER DEFINED
FUNCTION - UDF)FUNCTION - UDF)
Định nghĩaĐịnh nghĩa Câu lệnh Câu lệnh Mục đíchMục đích Cập nhật dữ liệu thông qua ViewCập nhật dữ liệu thông qua View Mã hóa ViewMã hóa View
NỘI DUNGNỘI DUNG
Định nghĩa VIEW Định nghĩa VIEW
View là View là bảng không chứa dữ liệubảng không chứa dữ liệu, nó chỉ là , nó chỉ là truy truy vấn kết hợp dữ liệuvấn kết hợp dữ liệu từ 1 hay nhiều bảng có quan từ 1 hay nhiều bảng có quan hệ với nhau và được hệ với nhau và được lưulưu thành một thành một đối tượngđối tượng của của SQL SV SQL SV
NSD có thể áp dụng NSD có thể áp dụng ngôn ngữ thao tác dữ liệungôn ngữ thao tác dữ liệu trên các View giống như Table.trên các View giống như Table.
Định nghĩa VIEWĐịnh nghĩa VIEWĐịnh nghĩa VIEWĐịnh nghĩa VIEW
USER_VIEWSUSER_VIEWS nv_kinhdoanhnv_kinhdoanhSELECT manv, hoten,luongFROM NHANVIENWHERE ma_phong = ‘KDA’;
SELECT *FROM nv_kinhdoanh;
NHANVIEN
SQL ServerSQL Server
Câu lệnh tạo VIEWCâu lệnh tạo VIEW
CREATE VIEWCREATE VIEW <Tên_View> <Tên_View>
[(<danh sách tên cột>) ] [(<danh sách tên cột>) ]
[WITH ENCRYPTION][WITH ENCRYPTION]
AS AS <Câu lệnh <Câu lệnh SELECTSELECT>>[with check option][with check option]
Câu lệnh tạo VIEWCâu lệnh tạo VIEW
Ví dụ 1: tạo View nv_kinh doanhVí dụ 1: tạo View nv_kinh doanh
CREAT VIEWCREAT VIEW nv_kinhdoanh nv_kinhdoanh
ASAS
SELECTSELECT Manv, Hoten, Luong Manv, Hoten, Luong
FROMFROM NHANVIEN NHANVIEN
* Sử dụng View:* Sử dụng View:
SELECT * FROM NV_KINHDOANHSELECT * FROM NV_KINHDOANH
Câu lệnh tạo VIEWCâu lệnh tạo VIEW
Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)Ví dụ 2: tạo View nv_tre (nhân viên dưới 35 tuổi)
CREAT VIEWCREAT VIEW nv_tre (Manv, Hoten, Tuoi) nv_tre (Manv, Hoten, Tuoi)ASAS
SELECTSELECT Manv, Hoten, Year(Getdate()) – Year(Ngaysinh) Manv, Hoten, Year(Getdate()) – Year(Ngaysinh)FROMFROM NHANVIEN NHANVIENWHEREWHERE Year(Getdate()) – Year(Ngaysinh) <= 35 Year(Getdate()) – Year(Ngaysinh) <= 35
* Sử dụng View:* Sử dụng View:SELECT * FROM NV_TRESELECT * FROM NV_TRE
Nếu một thuộc tính trong View được xây dựng từ một 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 đó.biểu thức thì bắt buộc phải đặt tên cho thuộc tính đó.
Mục đích dùng VIEWMục đích dùng VIEW
Hạn chế tính phức tạp của dữ liệu đối với NSD Hạn chế tính phức tạp của dữ liệu đối với NSD đơn giản.đơn giản.
Tạo ra bảng ảo có dữ liệu theo yêu cầu cho NSD 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.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.Hạn chế quyền truy cập dữ liệu của NSD. VieView dùng để trình bày các thông tin dẫn xuất.w 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 ViewCập nhật dữ liệu thông qua View
View định nghĩa dữ liệu trên View định nghĩa dữ liệu trên một bảngmột bảng thì thì có thểcó thể dùng dùng InsertInsert
Nếu trong định nghĩa View có chứa mệnh Nếu trong định nghĩa View có chứa mệnh đề đề Inner joinInner join thì thì không thểkhông thể dùng các thao tác dùng các thao tác InsertInsert hay hay DeleteDelete để thay đổi dữ liệu để thay đổi dữ liệu
Nếu trong định nghĩa View có chứa mệnh Nếu trong định nghĩa View có chứa mệnh đề đề With check optionWith check option thì chỉ thì chỉ những bản ghi những bản ghi thỏa mãn điều kiệnthỏa mãn điều kiện của View mới được của View mới được InsertInsert, , UpdateUpdate
Xây dựng View dựa trên View khácXâ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 Khi xóa 1 view, mọi view được xây dựng dựa trên view đó cũng bị xóa.trên view đó cũng bị xóa.
Có thể dùng thủ tục sp_helptext để xem định Có thể dùng thủ tục sp_helptext để xem định nghĩaViewnghĩaView
Tạo View bằng EMTạo View bằng EM MMã hoá View: dùng ã hoá View: dùng WITH ENCRYPTIONWITH ENCRYPTION
KhKhông thể xem được nội dung Viewông thể xem được nội dung View Không thể thay đổi lại đượcKhông thể thay đổi lại được
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
SP SP được xây dựng từ các câu lệnh T-SQL và được lưu được xây dựng từ các câu lệnh T-SQL và được lưu trú trên SQL server.trú trên SQL server.
Muốn thực hiện một SP, NSD chỉ cần thực hiện một 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.lời gọi hàm.
Khi SP được chạy lần đầu tiên nó sẽ được biên dịch 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 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 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.sau chạy lại thủ tục sẽ không phải dịch lại nữa.
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
NNăm bước biên dịch thủ tục:ă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 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ủ 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.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 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.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 Sinh ra mô hình truy vấn của thủ tục và lưu vào bảng
sysproceduresysprocedure Khi SP được chạy lần đầu tiên, cây truy vấn sẽ được đọc và 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 được tối ưu thành một kế hoạch thủ tục và chạy tiết kiệm 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ờ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.
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
Trong mTrong một phiên làm việc, nếu SP được thực hiện, nó ộ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 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 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 ra từ vùng nhớ đệm nâng cao hiệu suất chạy truy nâng cao hiệu suất chạy truy vấn.vấn.
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
CCú pháp lệnh tạo SP:ú pháp lệnh tạo SP:CREATE PROC[EDURE] <tên SP>CREATE PROC[EDURE] <tên SP>
[@ <tên tham số 1> <kiểu DL> [@ <tên tham số 1> <kiểu DL>
[= <gi[= <giá trị>á trị>] [OUTPUT], . . .]] [OUTPUT], . . .]
[WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION][WITH RECCOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION]
ASAS
<các câu lệnh SQL, câu lệnh điều khiển, . . .><các câu lệnh SQL, câu lệnh điều khiển, . . .>
GiGiải thích:ải thích:- =<giá trị>: gán giá trị ban đầu cho tham số=<giá trị>: gán giá trị ban đầu cho tham số- OUTPUT: giOUTPUT: giá trị thay đổi của tham số ở trong thủ tục được đưa á trị thay đổi của tham số ở trong thủ tục được đưa
ra bên ngoài thủ tục.ra bên ngoài thủ tục.
VVí dụí dụ
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
TThực hiện thủ tục: hực hiện thủ tục: EXEC <tên SP>EXEC <tên SP> Thay đổi thủ tụcThay đổi thủ tục
ALTER PROALTER PRO[[CEDURECEDURE]] . . . . . . XXóa thủ tụcóa thủ tụcDROP PRO[CEDURE] <tên SP>DROP PRO[CEDURE] <tên SP> BBó thủ tụcó thủ tục
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh CREATE CREATE
PROPRO: : Thủ tục sẽ được biên dịch lại từ đầu mỗi khi thực hiệnThủ 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à 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.tối ưu lại. Sử dụng tùy chọn Sử dụng tùy chọn RECOMPILERECOMPILE trong câu lệnh trong câu lệnh EXECEXEC
Thủ tục sẽ được biên dịch lại trong lần thực thi đó và lưu lại 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.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:Biên dịch lại tất cả các thủ tục của bảng:
EXECEXEC sp_recompile <tên bảng> sp_recompile <tên bảng>
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
Ví dụ: Ví dụ: USE qlnv;USE qlnv;
GOGO
CREATE PROC DS_PhongCREATE PROC DS_Phong
@BienMaPhong CHAR (3)@BienMaPhong CHAR (3)
ASAS
SELECT Manv, HoTen, NgaySinhSELECT Manv, HoTen, NgaySinh
FROM NhanVienFROM NhanVien
WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong
GOGO
Exec DS_Phong 'KDA'Exec DS_Phong 'KDA'
SP này như một view có tham số!
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
Ví dụ: Ví dụ: USE qlnv;USE qlnv;
GOGO
CREATE PROC Soluong_PhongCREATE PROC Soluong_Phong
@BienMaPhong CHAR (3),@BienMaPhong CHAR (3),
@SL int OUTPUT@SL int OUTPUT
ASAS
SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)
FROM NhanVienFROM NhanVien
WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong
GOGO
-- Thuc hien thu tuc luu tru-- Thuc hien thu tuc luu truDECLARE @dem INT; DECLARE @phong CHAR(3); DECLARE @dem INT; DECLARE @phong CHAR(3);
SET @phong='KDA';SET @phong='KDA';
EXEC Soluong_Phong @phong, @dem OUTPUTEXEC Soluong_Phong @phong, @dem OUTPUT
--Hoac--Hoac
EXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUTEXEC Soluong_Phong @BienMaPhong=@phong, @SL=@dem OUTPUT
PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))PRINT 'So luong nhan vien phong ' + @phong + ' la: ' + CAST (@dem AS CHAR(20))
--Xoa thu tuc luu tru--Xoa thu tuc luu tru
DROP PROC Soluong_PhongDROP PROC Soluong_Phong
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORED PROCEDURE)(STORED PROCEDURE)
Ví dụ: (Thu tuc luu tru voi tham so mac dinh)Ví dụ: (Thu tuc luu tru voi tham so mac dinh)CREATE PROC Soluong_Phong_DefaultCREATE PROC Soluong_Phong_Default
@BienMaPhong CHAR (3)='KDA'@BienMaPhong CHAR (3)='KDA',,
@SL int OUTPUT@SL int OUTPUT
ASAS
SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)
FROM NhanVienFROM NhanVien
WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong
GOGO
DECLARE @dem INT; DECLARE @dem INT;
EXEC Soluong_Phong_Default @SL=@demEXEC Soluong_Phong_Default @SL=@dem
EXEC Soluong_Phong_Default 'QTA', @demEXEC Soluong_Phong_Default 'QTA', @dem
THTHỦ TỤC LƯU TRÚ Ủ TỤC LƯU TRÚ (STORE PROCEDURE)(STORE PROCEDURE)
Create proc XepLoaiSV @MaSV varchar(10), @DTB float output, @XL nvarchar(20) output
AsSet @DTB = (Select avg(Diem) from KetQua KqWhere MaSV = @MaSV and not exists (
select * from KetQua Kq1where Kq1.MaSV = @MaSV and
Kq1.MaMH=Kq.MaMHand Kq1.LanThi > Kq.LanThi
) )
If @DTB >= 9Set @XL = N’Xuât sac’
Else if @DTB >= 8Set @XL = N’Gi~i’
Else if @DTB >= 7Set @XL = N’Khá’
Else if @DTB >= 5Set @XL = N’Trung bình’
ElseSet @XL = N’Yêu’
Go
HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
Cú pháp câu lệnh:Cú pháp câu lệnh:
CREATE FUNCTION <tên hàm>CREATE FUNCTION <tên hàm>
([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])([@<tên tham số> <kiểu DL vô hướng> [= <giá trị>] [, . . .]])
RETURNRETURNSS <kiểu vô hướng>|<table> <kiểu vô hướng>|<table>
[WITH ENCRYPTION][WITH ENCRYPTION]
ASAS
BEGINBEGIN
[<các câu lệnh>][<các câu lệnh>]
RETURN <giá trị vô hướng>| (<câu lệnh RETURN <giá trị vô hướng>| (<câu lệnh SELECT>)SELECT>)
HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
--Ham vo huong--Ham vo huongCREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )CREATE FUNCTION Ham_Soluong_Phong ( @BienMaPhong CHAR (3) )
RETURNRETURNSS int int
ASAS
BEGINBEGIN
DECLARE @SL int;DECLARE @SL int;
SELECT @SL = COUNT (*)SELECT @SL = COUNT (*)
FROM NhanVienFROM NhanVien
WHERE MaPhong=@BienMaPhong ;WHERE MaPhong=@BienMaPhong ;
RETURN (@SL);RETURN (@SL);
ENDEND--Su dung ham (Ham xuat hien trong bieu thuc)--Su dung ham (Ham xuat hien trong bieu thuc)
SELECT dbo.Ham_Soluong_Phong('KDA');SELECT dbo.Ham_Soluong_Phong('KDA');
SELECT MaPhong, count (*) SELECT MaPhong, count (*)
FROM NhanVien FROM NhanVien
GROUP BY MaPhongGROUP BY MaPhong
HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')HAVING count(*) > dbo.Ham_Soluong_Phong('QTA')
--Ham cho ket qua la mot bang--Ham cho ket qua la mot bangCREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))CREATE FUNCTION Ham_DS_Phong (@BienMaPhong CHAR (3))
RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)RETURNS @kq TABLE (Manv CHAR(5), HoTen NCHAR(40), NgaySinh DATETIME)
BEGINBEGIN
INSERT INTO @kqINSERT INTO @kq
SELECT Manv, HoTen, NgaySinhSELECT Manv, HoTen, NgaySinh
FROM NhanVienFROM NhanVien
WHERE MaPhong=@BienMaPhong WHERE MaPhong=@BienMaPhong
RETURNRETURN
ENDEND
-- Su dung ham tra ket qua bang nhu la TABLE-- Su dung ham tra ket qua bang nhu la TABLE
SELECT * SELECT *
FROM FROM Ham_DS_Phong ('QTA')Ham_DS_Phong ('QTA')
HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
UDFs giống như SP nhưng khác ở các điểm sau: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 truyền ra ngoài.
- Trả ra một giá trị bằng mệnh đề RETURN
- Có thể trả về một giá trị vô hướng hoặc một bảng dữ liệu.
- Có thể đưa giá trị của tham số ra ngoài bằng thuộc tính OUTPUT
- Chỉ trả về kiểu DL giá trị
kiểu nguyên
HHÀM CỦA NSDÀM CỦA NSD(USER DEFINED FUNCTIONS-UDFs)(USER DEFINED FUNCTIONS-UDFs)
Nội dungNội dung
Khái niệm về triggerKhái niệm về trigger
Câu lệnh tạo triggerCâu lệnh tạo trigger
Các loại triggerCác loại trigger
Ứng dụng của triggerỨng dụng của trigger
Sửa, xóa triggerSửa, xóa trigger
Khái niệm về triggerKhái niệm về trigger
Thủ tục lưu trú (Stored Procedure) đặc biệt Thủ tục lưu trú (Stored Procedure) đặc biệt Triger Triger tự động được chạytự động được chạy mỗi khi có một mỗi khi có một
hành độnghành động liên quan đến nó xảy ra liên quan đến nó xảy ra Triger Triger không có tham sốkhông có tham số, , không trả ra giá không trả ra giá
trịtrị như SP bình thường. như SP bình thường. Các loại trigger: Insert trigger, Delete Các loại trigger: Insert trigger, Delete
trigger, Update trigger, trigger tổng hợp.trigger, Update trigger, trigger tổng hợp.
Cú pháp câu lệnh tạo triggerCú pháp câu lệnh tạo trigger
CREATE TRIGGERCREATE TRIGGER <tên triger> <tên triger>
ONON <tên bảng>|<tên view> <tên bảng>|<tên view>
[[WITH ENCRYPTIONWITH ENCRYPTION]]
{{
{{FORFOR | | AFTERAFTER| | INSTEAD OFINSTEAD OF}}
<<INSERTINSERT [, [, UPDATEUPDATE] [, ] [, DELETEDELETE]>]>
}}
ASAS
<câu lệnh SQL><câu lệnh SQL>
Trigger chèn (Insert trigger): định nghĩaTrigger chèn (Insert trigger): định nghĩa
Tự độngTự động được thực hiện mỗi khi bản ghi đượ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ới được chèn vào bảng gắn với nó
Một bảng tạm Một bảng tạm InsertedInserted sẽ được sinh ra sẽ được sinh ra Bản ghi cần chèn sẽ được ghi vào bảng cơ Bản ghi cần chèn sẽ được ghi vào bảng cơ
sở và bảng Insertedsở và bảng Inserted
Trigger chèn: ví dụTrigger chèn: ví dụ
CREATE TRIGGER trInsNVCREATE TRIGGER trInsNV
ON NHANVIENON NHANVIEN
FOR INSERTFOR INSERT
ASAS
RAISERROR('%d hang da duoc them vao bang RAISERROR('%d hang da duoc them vao bang NHANVIEN', 0, 1,@@rowcount) NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có bản 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 NHANVIENghi mới được chèn vào bảng NHANVIEN
Trigger xóa: ví dụTrigger xóa: ví dụ
CREATE TRIGGER trDelNVCREATE TRIGGER trDelNV
ON NHANVIENON NHANVIEN
FOR DELETEFOR DELETE
ASAS
RAISERROR('%d hàng bị xóa trong bảng RAISERROR('%d hàng bị xóa trong bảng NHANVIEN', 0, 1,@@rowcount)NHANVIEN', 0, 1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có một 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 NHANVIENhoặc nhiều bản ghi bị xóa ở bảng NHANVIEN
Trigger cập nhật (Update trigger): ví dụTrigger cập nhật (Update trigger): ví dụ
CREATE TRIGGER trUpNVCREATE TRIGGER trUpNV
ON NHANVIENON NHANVIEN
FOR UPDATEFOR UPDATE
ASAS
RAISERROR('%d RAISERROR('%d %d hàng đã được sửa ở bảng bảng %d hàng đã được sửa ở bảng bảng
NHANVIEN'NHANVIEN', 0, , 0, 1,@@rowcount)1,@@rowcount)
Trigger này tự động được thực hiện mỗi khi có một 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 câu lệnh Update được thực hiện trên bảng NHANVIEN.NHANVIEN.
Trigger tổng hợp: ví dụTrigger tổng hợp: ví dụ
CREATE TRIGGER trIns_UpNVCREATE TRIGGER trIns_UpNV
ON NHANVIENON NHANVIEN
FOR INSERT, UPDATEFOR INSERT, UPDATE
ASAS
RAISERROR('%d hàng đã được thêm hoặc sửa ở RAISERROR('%d hàng đã được thêm hoặc sửa ở bảng NHANVIEN', 0, 1,@@rowcount)bảng NHANVIEN', 0, 1,@@rowcount)
Trigger Trigger Instead ofInstead of
cho phép cập nhật DL các bảng thông qua cho phép cập nhật DL các bảng thông qua view có liên kết nhiều bảngview 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Ứng dụng: Đảm bảo ràng buộc toàn vẹn dữ liệu
CREATE TRIGGER trDelNVCREATE TRIGGER trDelNVON NHANVIENON NHANVIENFOR DELETEFOR DELETEASASRAISERROR('%d hang bi xoa trong bang NHANVIEN', 0, RAISERROR('%d hang bi xoa trong bang NHANVIEN', 0,
1,@@rowcount)1,@@rowcount)------------------------CREATE TRIGGER trDelPhongCREATE TRIGGER trDelPhongON PHONGON PHONGFOR DELETEFOR DELETEASASDELETE NHANVIEN FROM DELETED WHERE DELETE NHANVIEN FROM DELETED WHERE
DELETED.MAPHONG =NHANVIEN.MAPHONG DELETED.MAPHONG =NHANVIEN.MAPHONG
Ứng dụng: Đóng gói quy tắc nghiệp vụỨng dụng: Đóng gói quy tắc nghiệp vụ
CREATE TRIGGER trInsNV_PHONGCREATE TRIGGER trInsNV_PHONG
ON NHANVIENON NHANVIEN
FOR INSERTFOR INSERT
ASAS
UPDATE PHONG SET SONV = SONV+1 UPDATE PHONG SET SONV = SONV+1 WHERE PHONG.MAPHONG = (SELECT WHERE PHONG.MAPHONG = (SELECT MAPHONG FROM INSERTED)MAPHONG FROM INSERTED)
Một số chú ý khi dùng triggerMột số chú ý khi dùng trigger
Một bảng có nhiều triggerMột bảng có nhiều trigger Mỗi một trigger có tên duy nhấtMỗi một trigger có tên duy nhất Trong trigger thường dùng mệnh đề IF Trong trigger thường dùng mệnh đề IF
EXISTSEXISTS
Xóa, sửa Xóa, sửa triggertrigger
Xoá triggerXoá trigger
DROP TRIGGER <tên trigger>DROP TRIGGER <tên trigger> Sửa triggerSửa trigger
ALTER TRIGGER <tên trigger> . . .ALTER TRIGGER <tên trigger> . . .
Xem lại định nghĩa của trigger: sp_helptextXem lại định nghĩa của trigger: sp_helptext
Tạo trigger bằng EMTạo trigger bằng EM