You are on page 1of 57

Chương 3

Hàm và thủ tục

1
Nội dung

1. Hàm và thủ tục trong SQL Server.


2. Hàm và thủ tục do người dung định nghĩa.

2
Hàm và thủ tục trong SQL Server

1. Khái niệm hàm (function) trong SQL Server


Là đối tượng cơ sở dữ liệu
 Nhận vào tham số
 Trả về giá trị thông qua tên hàm
 Thân hàm gồm một tập lệnh SQL.
 Có thể dùng hàm như một biểu thức hoặc gọi
hàm bằng lệnh EXECUTE

3
Hàm và thủ tục trong SQL Server
2. Các loại hàm
 Hàm hệ thống (build-in)
Được viết sẵn dành cho SQL Server
 Hàm do người dùng tự định nghĩa (user-
defined):
 Người dùng tự xây dựng theo nhu cầu
 Dùng lệnh return để trả kết quả
 SQL Server hỗ trợ các kiểu trả về từ hàm: giá
trị hoặc bảng dữ liệu
4
Hàm và thủ tục trong SQL Server
 Chú ý
 Hàm người dùng tự định nghĩa không trả về các
kiểu:
 ntext
 text
 Image
 Cursor
 Timestamp
 Có thể cung cấp thông tin về lỗi nếu phát hiện 5
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm toán học:
 abs(numeric),
 sqrt(float),
 PI(),
 ceiling(numeric),
 floor(numeric), …

6
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm về thời gian:
 getdate(),
 year(date),
 month(date),
 day(date),
 datediff(datepart, begindate, enddate),
 dateadd(datepart, number, date), …

7
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm về thời gian:

Định dạng Định dạng Hiển thị dữ liệu


năm(YY) năm(YYYY)
1 101 Mm/dd/yyyy
3 103 Dd/mm/yyyy
5 105 Dd-mm-yyyy
12 112 Yyyymmdd

8
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm về thời gian:
select convert(varchar(10),getdate(), 105)
Kết quả: 28-03-2012
select convert(varchar(10),getdate(), 103)
Kết quả: 28/03/2012
select convert(varchar(10),getdate(), 101)
Kết quả: 03/28/2012

9
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm xử lý chuỗi:
 substring(expression, start, end),
 len(expression),
 replace(expression, find_exp, rep_exp),
 nchar(integer),
 charindex(find_exp, expression_string),
 rtrim(expression_string),
 ltrim(expression_string), …
10
Hàm và thủ tục trong SQL Server
 Hàm hệ thống
 Hàm xử lý chuỗi:
 select substring(‘abcdef’, 2, 3)
Kết quả: bcd
 select nchar(97)
Kết quả: a
 select charindex('cd', 'abcdef')
Kết quả: 3

11
Hàm và thủ tục do người dung
định nghĩa
 Cú pháp

12
Hàm và thủ tục do người dung
định nghĩa

 Ví dụ:
1. Hàm trả về một giá trị: tính tổng 2 số nguyên
CREATE FUNCTION Tong (@a int, @b int)
RETURNS int
AS
BEGIN
return @a+@b
END

13
Hàm và thủ tục do người dung
định nghĩa

 Gọi hàm Tong


 Cách 1
 SELECT dbo.Tong(3,4)
 PRINT 'TONG: ' + STR(dbo.Tong(6,3))
 Cách 2
DECLARE @TONG INT
SET @TONG = dbo.Tong(6,3)
SELECT @TONG

14
Hàm và thủ tục do người dung
định nghĩa

 Ví dụ:
2. Hàm trả về một bảng dữ liệu:
CREATE FUNCTION TableEmp (@IsWorking int)
RETURNS table
AS
return (select *
from EMPLOYEE
where IS_WORKING=@IsWorking)

15
Hàm và thủ tục do người dung
định nghĩa
 Gọi hàm TableEmp
select * from dbo.TableEmp(1)

Chú ý: phần thân của hàm chỉ cho phép sự xuất


hiện duy nhất của câu lệnh RETURN. Ngoài ra,
không sử dụng bất kỳ câu lệnh nào khác trong
phần thân của hàm

16
Hàm và thủ tục do người dung
định nghĩa
 Trong trường hợp cần phải sử dụng đến nhiều câu lệnh
trong phần thân của hàm, ta sử dụng cú pháp như sau
để định nghĩa hàm
CREATE FUNCTION tên_hàm([các_tham_số])
RETURNS @biến_bảng TABLE định_nghĩa_bảng
AS
BEGIN
các_câu_lệnh_trong_thân_hàm
RETURN
END

17
Hàm và thủ tục do người dung
định nghĩa
 Chú ý
 Cấu trúc của bảng trả về bởi hàm được xác định dựa
vào định nghĩa của bảng trong mệnh đề RETURNS.
 Biến @biến_bảng trong mệnh đề RETURNS có phạm
vi sử dụng trong hàm và được sử dụng như là một
tên bảng.
 Câu lệnh RETURN trong thân hàm không chỉ định giá
trị trả về.
 Giá trị trả về của hàm chính là các dòng dữ liệu trong
bảng có tên là @biến_bảng được định nghĩa trong
mệnh đề RETURNS

18
Hàm và thủ tục do người dung
định nghĩa
 Ví dụ
create function THop(@NO_DEP varchar(7))
returns @DEP_EMP table(NO_EMP varchar(7), NO_DEP
varchar(7)) as
begin
if (@NO_DEP='') INSERT INTO @DEP_EMP
select NO_EMP, '1006001' from EMPLOYEE
else INSERT INTO @DEP_EMP
select NO_EMP, NO_DEP from EMPLOYEE d
where d.NO_DEP=@NO_DEP
return
end

19
Hàm và thủ tục do người dung
định nghĩa
 Sửa hàm
 Cú pháp

20
Hàm và thủ tục do người dung
định nghĩa
 Ví dụ: Sửa hàm Tong(@a int, @b int)
ALTER FUNCTION Tong (@a int, @b int, @c int)
RETURNS int
AS
BEGIN
return @a+@b+@c
END

21
Hàm và thủ tục do người dung
định nghĩa
 Ví dụ: Sửa hàm TableEmp(@IsWorking int)
ALTER FUNCTION TableEmp (@IsWorking int)
RETURNS table
AS
return (select NO_EMP, NAME_EMP
from EMPLOYEE
where IS_WORKING=@IsWorking)

22
Hàm và thủ tục do người dung
định nghĩa

 Xóa hàm
 Cú pháp
DROP FUNCTION <Ten_Function>
 Ví dụ
DROP FUNCTION Tong

23
Hàm và thủ tục do người dung
định nghĩa
 Tính số nhân viên theo phòng
CREATE FUNCTION SoNV (@NO_DEP varchar(7) )
RETURNS INT
BEGIN
DECLARE @So_NV INT
SET @So_NV = (SELECT COUNT(NO_EMP)
FROM NHANVIEN
WHERE NO_DEP = @NO_DEP
AND IS_ACTIVE=1)
RETURN @So_NV
END

24
Hàm và thủ tục do người dung
định nghĩa
Store procedure (SP):
 Là một tập các câu lệnh SQL (chương trình) được biên dịch
và lưu trữ sẵn trên SQL Server
 SP cho phép
 Chứa nhiều câu lệnh, có thể gọi các SP khác
 Nhận các tham số đầu vào, đầu ra
 Trả về trạng thái thực hiện (thành công hay thất bại) và
nguyên nhân
 Một số loại SP
 System stored procedure: SP hệ thống, có tên bắt đầu bằng
sp_
 User defined stored procedure: SP do người dùng định nghĩa
 Temporary stored procedure: SP tạm thời, bắt đầu bằng # 25
Hàm và thủ tục do người dung
định nghĩa
 Quá trình tạo SP
- Phân tích cú pháp:
 Nếu có lỗi cú pháp thì thông báo lỗi và không tạo SP
 Ngược lại tạo SP, tên SP lưu ở sysobjects, văn bản lệnh lưu ở
syscomments
 Thi hành SP (lần đầu hoặc biên dịch lại)
- Đọc văn bản lệnh ở syscomments
- Phân giải tên: liên kết các đối tượng mà SP tham khảo đến
- Tối ưu hóa: tạo kế hoạch thi hành nhanh nhất dựa vào trạng
thái của CSDL và cấu trúc câu lệnh
- Biên dịch: tạo mã thi hành cho kế hoạch đã được tối ưu hóa
và đặt trong vùng procedure cache
- Thi hành SP
26
Hàm và thủ tục do người dung
định nghĩa
 Ưu điểm khi sử dụng SP
- Cho phép các ứng dụng khác nhau dùng chung xử lý, đảm
bảo tính nhất quán trong truy xuất và xử lý dữ liệu
- Nhanh, giảm lưu lượng mạng

27
Hàm và thủ tục do người dung
định nghĩa
 Biến cục bộ: là một đối tượng cụ thể lưu giữ một giá trị
dữ liệu đơn của một kiểu xác định.
- Tên của biến cục bộ được bắt đầu bởi ký hiệu @
- Biến cục bộ được khai báo bằng lệnh DECLARE
- Ví dụ
DECLARE @sl int, @dbname nvarchar(128)
- Biến cục bộ không thể có kiểu dữ liệu là text, ntext
hoặc image.
 Biến toàn cục (hệ thống): do SQL tạo ra
- Tên bắt đầu bởi ký hiệu @@
- Ví dụ: @@rowcount, @@error
28
Hàm và thủ tục do người dung
định nghĩa
 Lệnh IF … ELSE
 Cú pháp IF <Bieu_thuc_Logic>
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END >
[ELSE
<Cau_lenh_SQL |BEGIN < Khoi_lenh lệnh> END>]

 Ví dụ SELECT * FROM NHANVIEN


IF @@rowcount > 0
PRINT N'Có dữ liệu‘
ELSE
PRINT N'Bảng chưa có dữ liệu'

29
Hàm và thủ tục do người dung
định nghĩa
 Lệnh CASE
CASE <Bieu_thuc>
 Cú pháp WHEN <Gia_tri_1> THEN <Ket_qua_1>
[WHEN <Gia_tri_2> THEN <Ket_qua_2>]

[ELSE <Ket_qua_khac>]
END

 Ví dụ SELECT Thu =
CASE datepart(w,getdate())
WHEN 1 THEN 'Chu nhat’ WHEN 2 THEN 'Thu hai'
WHEN 3 THEN 'Thu ba’ WHEN 4 THEN 'Thu tu'
WHEN 5 THEN 'Thu nam’ WHEN 6 THEN 'Thu sau'
WHEN 7 THEN 'Thu bay'
END
30
Hàm và thủ tục do người dung
định nghĩa
 Lệnh WHILE
 Cú pháp WHILE <Bieu_thuc_Logic>
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END > [BREAK]
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END >[CONTINUE]
<Cau_lenh_SQL |BEGIN <Khoi_lenh> END >

 Ví dụ DECLARE @Dem int Cách 2:


SET @Dem = 0 DECLARE @Dem int
WHILE 1=1 SET @Dem = 0
BEGIN WHILE (@Dem <= 20)
SET @Dem = @Dem + 1 BEGIN
IF (@dem > 20) BREAK IF (@Dem%2=0) Print @Dem
IF @Dem%2<>0 CONTINUE SET @Dem = @Dem + 1
ELSE Print @Dem END
END
31
Hàm và thủ tục do người dung
định nghĩa
Một số lệnh thông dụng

 RETURN [Bieu_thuc_nguyen]
- Dùng để thoát khỏi SP
- Ví dụ
RETURN RETURN 0 RETURN (1)

 PRINT <Chuoi | @Bien>


- Dùng để xuất kết quả, giá trị ra màn hình
- Ví dụ
PRINT ‘ABC’ PRINT @Dem PRINT
GETDATE()
32
Hàm và thủ tục do người dung
định nghĩa
Một số lệnh thông dụng
BREAK
Dùng để thoát khỏi vòng lặp
CONTINUE
Dùng để trở về đầu vòng lặp

33
Hàm và thủ tục do người dung
định nghĩa
 Tạo SP
 Sử dụng lệnh CREATE PROCEDURE để tạo SP, SP được
lưu ở DB hiện hành
 Nếu trong SP có tạo một bảng tạm, thì bảng tạm chỉ tồn tại
khi thực thi SP, bảng tạm sẽ tự động bị xóa khi thi hành xong
SP (bảng tạm có tên bắt đầu bằng ký hiệu #, ví dụ:
#NHANVIEN)
 Trong SP không được chứa các câu lệnh: CREATE
PROCEDURE, CREATE RULE, CREATE VIEW, CREATE
TRIGGER
 Để thi hành lệnh CREATE PROCEDURE, người dùng phải là
thành viên của một trong các role: sysadmin, db_owner,
db_ddladmin hoặc được cấp quyền CREATE PROCEDURE
34
Hàm và thủ tục do người dung
định nghĩa
 Tạo SP
 Cú pháp

CREATE PROC [EDURE] <Ten_Procedure>


[ @<Tham_so> <Kieu_du_lieu> [ = <Gia_tri_mac_dinh> ] [ OUTPUT ] ]
[ ,...n ]
[ WITH { RECOMPILE | ENCRYPTION } ]
AS
<Cac_cau_lenh_SQL>

35
Hàm và thủ tục do người dung
định nghĩa
 Tạo SP
 Giải thích
- Ten_Procedure: tên procedure, các SP tạm cục bộ có ký hiệu
# trước tên của SP
- @<Tham_so>: tên tham số của procedure
- <Kieu_du_lieu>: kiểu dữ liệu của tham số
- <Gia_tri_mac_dinh>: giá trị mặc định của tham số
- OUTPUT: cho phép tham số nhận giá trị trả về
- RECOMPILE: nếu có thêm tùy chọn này thì mỗi lần thi hành
SQL Server sẽ biên dịch lại SP và mã của SP không được lưu
vào vùng đệm của thủ tục
- ENCRYPTION: nếu có thêm tùy chọn này thì văn bản lệnh
được mã hóa và lưu trong syscomments
36
Hàm và thủ tục do người dung
định nghĩa
 Tạo SP
 Ví dụ
CREATE PROC DS_NHANVIEN
AS
SELECT * FROM nhanvien

 Để thực thi SP

EXEC[UTE] <Ten_Procedure> [Danh_sach_tham_so]

- Ví dụ
EXEC DS_NHANVIEN
37
Hàm và thủ tục do người dung
định nghĩa
 Hiệu chỉnh SP
 Cú pháp

ALTER PROC [EDURE] <Ten_Procedure>


[ @<Tham_so> <Kieu_du_lieu> [ = <Gia_tri_mac_dinh> ] [ OUTPUT ] ]
[ ,...n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
AS
<Cac_cau_lenh_SQL>

 Ví dụ
ALTER PROC DS_NHANVIEN
AS
SELECT * FROM nhanvien WHERE PHAI= ‘Nam’

38
Hàm và thủ tục do người dung
định nghĩa
 Xóa SP
 Cú pháp
DROP PROC [EDURE] <Ten_Procedure>

 Ví dụ

DROP PROC DS_NHANVIEN

39
Hàm và thủ tục do người dung
định nghĩa
 Xem thông tin SP
Stored procedure Thông tin
Danh sách các tham số cùng
sp_help <Ten_procedure>
kiểu dữ liệu
Văn bản lệnh của SP trong
sp_helptext <Ten_procedure>
trường hợp không mã hóa
Liệt kê các đối tượng mà SP
sp_depends <Ten_procedure> tham khảo đến và các đối
tượng tham khảo đến SP
Danh sách các SP trong DB
sp_stored_procedures
hiện hành

40
Hàm và thủ tục do người dung
định nghĩa
Ví dụ 1 – có tham số vào, default
 Xem danh sách nhân viên theo phòng
CREATE PROC DSNV_THEOPHONG
@Phong int = 1
AS
SELECT * FROM NHANVIEN
WHERE PHG = @Phong

 Thực thi SP
- Cách 1:
 EXEC DSNV_THEOPHONG 4
- Cách 2:
 DECLARE @P int
 Set @P = 5
 EXEC DSNV_THEOPHONG @P
41
Hàm và thủ tục do người dung
định nghĩa
Ví dụ 2 – có tham số vào, ra
 Xóa thân nhân theo MANV
CREATE PROC XOA_THANNHAN_THEOMANV
@MANV nvarchar(20), @SoNVXoa int OUTPUT
AS
DELETE THANNHAN
WHERE MA_NVIEN = @MaNV
SET @SoNVXoa = @@rowcount

 Thực thi SP
- DECLARE @SoNVXoa int
- EXEC XOA_THANNHAN_NHANVIEN ‘123’, @SoNVXoa
OUTPUT
- PRINT 'So mau tin bi xoa:' + str(@SoNVXoa,3)
42
Hàm và thủ tục do người dung
định nghĩa
Ví dụ 3 – có recompile , encryption

 Tăng lương cho nhân viên theo phòng lên @Tyle lần

CREATE PROC TANGLUONG_NHANVIEN


@Phong int, @Tyle Decimal(3,1), @So_NV_Tang int OUTPUT
WITH RECOMPILE, ENCRYPTION
AS
UPDATE NHANVIEN
SET LUONG = LUONG * @Tyle
WHERE PHG = @Phong
SET @So_NV_Tang = @@rowcount

43
Hàm và thủ tục do người dung
định nghĩa
Ví dụ 4 – có chặn lỗi
Thêm phòng ban
CREATE PROC THEM_PHONGBAN @TENPHG NVARCHAR(40),
@MAPHG INT, @TRPHG NVARCHAR(20),
@NG_NHANCHUC SMALLDATETIME, @Loi int OUTPUT AS
BEGIN TRY
INSERT PHONGBAN VALUES
(@TENPHG, @MAPHG, @TRPHG, @NG_NHANCHUC)
END TRY
BEGIN CATCH
SET @Loi = @@error
RAISERROR('Loi them du lieu',10,1)
RETURN
END CATCH
SET @Loi = @@error

44
Hàm và thủ tục do người dung
định nghĩa
 Datepart: d, w, m, y
 DATEADD(datepart, number, date): cộng thêm cho ngày
đang xét một số ứng với datepart
 DATEDIFF(datepart, startdate, enddate): trả về số ngày,
tuần, … giữa 2 ngày khác nhau
 DATENAME(datepart, date): trả về chuỗi tên của ngày
tháng
 DATEPART(datepart, date): trả về giá trị số nguyên ứng
với tham số datepart

45
Trigger
 Trigger là một stored procedure đặc biệt được gọi tự
động khi user thao tác trên dữ liệu của một table
 Được kết hợp với table: Được định nghĩa trên một table cụ
thể .
 Được gọi tự động: Khi có một thao tác cập nhật dữ liệu
trên table (insert, update, hoặc delete) thì trigger của thao
tác tương ứng được tự động thực hiện.
 Khác với procedure, trigger không thể được gọi trực tiếp,
không nhận tham số
 Là một phần của transaction: những lệnh trong trigger
được xem là một single transaction, có thể được roll back
từ bất kỳ chổ nào trong trigger

46
Trigger
 Mục đích sử dụng:
 Để thực hiện cascade updates và cascade deletes qua
các table quan hệ trong database
 Bảo đảm tính toàn vẹn dữ liệu phức tạp : Thực hiện các
ràng buộc có tham chiếu đến các column trong nhiều
table.
 Định nghĩa Custom Error Messages: Dùng trigger để trả
về các chuỗi thông báo trạng thái của một hành động
nào đó.
 Bảo trì các dữ liệu chưa được chuẩn hoá.
 Các tác vụ khác theo yêu cầu nghiệp vụ.

47
Trigger
 Triggers được thực hiện tự động sau khi lệnh INSERT, UPDATE,
hoặc DELETE được thực hiện trên một table mà trigger đó được
định nghĩa. Còn các constraints và INSTEAD OF trigger sẽ được
kiểm tra trước khi lệnh INSERT, UPDATE, hoặc DELETE thực
hiện.
 Constraints sẽ được kiểm tra trước trigger.
 Một table có thể có nhiều Triggers cho một action. Một trigger có
thể được định nghĩa cho nhiều action.
 Khi có nhiều trigger trong một table, thì table owner có thể dùng
procedure hệ thống sp_settriggerorder để chỉ định trigger đầu và
trigger cuối để thực thi. Thứ tự của các trigger còn lại không thể
sắp xếp được.
 User phải có quyền để thực hiện tất cả các lệnh mà được định
nghĩa trong Triggers
 Table Owners không thể tạo ra các Triggers trên Views hoặc
Temporary Tables nhưng có thể tham chiếu đến view và
temporary. 48
Trigger
 Triggers không trả kết quả về.
 Triggers có thể điều khiển multi-row actions: một hành động
INSERT, UPDATE, hoặc DELETE gọi một trigger có thể ảnh
hưởng lên nhiều dòng dữ liệu, Ta có thể chọn:
 Xử lý tất cả các dòng cùng với nhau trong trường hợp các
dòng ảnh hưởng phải thoả điều kiện của trigger.
 Xử lý từng dòng thỏa điều kiện.
 Các trigger có thể lồng nhau tới 32 mức.
 Để cho phép lồng các triger, chúng ta sử dùng Store Procedure
sp_configure:
 Sp_configure ‘nested trigger’,1
 Để không cho phép lồng các triger, chúng ta sử dùng Store
Procedure sp_configure:
 Sp_configure ‘nested trigger’,0 49
Trigger
 Khi có action Insert, table logic inserted sinh ra, có cấu trúc
giống với cấu trúc table được insert, có dữ liệu là record đang
được insert
 Khi có action delete, table deleted sinh ra, có cấu trúc giống
với cấu trúc table bị deleted, có dữ liệu là record đang bị xoá
 Khi có action update, có 2 table inserted và deleted

50
Trigger

CREATE TRIGGER trigger_name


ON { table | view }
[ WITH ENCRYPTION ]
{
{{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE] }
[ WITH APPEND ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ] [ ...n ]
}]
sql_statement [ ...n ]
}
}
51
Trigger
 Table | view : tên view/table mà tigger được thực hiện khi có
action tương ứng.
 WITH ENCRYPTION: mã hoá nội dung text của lệnh create
trigger trong table syscomments.
 AFTER: Trigger sẽ được gọi chỉ khi tất cả các hành động đã
thực hiện xong. Các kiểm tra constrain và cascade sẽ được
kiểm tra hoàn thành trước khi trigger thực hiện. Default là
AFTER nếu chỉ có từ khoá FOR được chỉ định. AFTER trigger
không thể định nghĩa trên view.
 INSTEAD OF: chỉ định trigger được thực hiện thay cho action
của trigger. INSTEAD OF triggers không cho phép cập nhật dữ
liệu trên view có WITH CHECK OPTION.
52
Trigger
 { [DELETE] [,] [INSERT] [,] [UPDATE] } : chỉ định action gắn với
trigger. Đối với INSTEAD OF triggers, action DELETE không cho
phép trên table mà có relationship mà chỉ định CASCADE ON
DELETE. Tương tự, action UPDATE không cho phép trên table có
relationships mà CASCADE ON UPDATE.
 Table deleted và inserted là logical tables. Chúng có cấu trúc
giống với table mà trigger được định nghĩa, chứa các dòng giá trị
cũ hoặc mới mà có thể thay đổi bởi action của user. Ta có truy
xuất dữ liệu trong 2 table này trong định nghĩa trigger.
 Các giá trị kiểu text, ntext, hoặc image trong table inserted và
deleted không truy xuất được.
 IF UPDATE (column): kiểm tra action update trên cột được chỉ
định, không dùng cho action delete.
 With Append: Chèn thêm trigger này vào các trigger đã có trước đó53
Trigger
Use Northwind
GO
CREATE TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 1
BEGIN
RAISERROR(
'You cannot delete more than one employee at a time.',
16, 1)
ROLLBACK TRANSACTION
END

54
Trigger
 Những lệnh sau đây không được dùng trong định nghĩa trigger

55
Trigger
 Sửa 1 trigger đã có
ALTER TRIGGER trigger_name ON table
[WITH ENCRYPTION]
{{FOR {[,] [DELETE] [,] [UPDATE] [,][INSERT]}
AS
sql_statement [...n] }
| {FOR {[,] [INSERT] [,] [UPDATE]}
AS
IF UPDATE (column)
[{AND | OR} UPDATE (column) [,...n]]
sql_statement [...n] }
}

56
Trigger
 Xoá trigger
DROP TRIGGER trigger_name

57

You might also like