SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Thủ tục thường trú
 Khái niệm: Thủ tục thường trú (Store Procedure-SP) là
một tập hợp chứa các dòng lệnh, các biến và các cấu
trúc điều khiển trong ngôn ngữ T-SQL dùng để thực hiện
một hành động nào đó. Nội dung của SP sẽ được lưu trữ
tại cơ sở dữ liệu của Microsoft SQL Server.
 Khi một câu lệnh gọi chạy stored procedure lần đầu tiên
thì SQL Server sẽ chạy nó và lưu trữ vào bộ nhớ đệm,
những lần tiếp theo SQL Server sẽ sử dụng lại nên sẽ
cho tốc độ xử lý tối ưu.
Store Procedure-SP
 Nhanh:SP có khả năng phân tích cú pháp và tối ưu
hóa trong lần thực thi đầu tiên, một phiên bản dịch của
chúng trong đó sẽ được lưu trong bộ nhớ để sử dụng
cho lần sau. Tức là nó không cần phải phân tích cú
pháp và tối ưu lại, mà sẽ sử dụng kết quả đã được biên
dịch trong lần đầu tiên. Do đó stored procedure có khả
năng thực thi nhanh hơn là việc xử lý một đoạn lệnh
Transaction – SQL lớn, lặp
Store Procedure-SP
 Bảo mật: Phân cấp ,giới hạn quyền cho các
user thậm chí họ không được phép thực thi trực
tiếp những stored procedure này. Khi đó sẽ hạn
chế, loại bỏ các vấn đề xâm phạm dữ liệu không
được cấp phép
Store Procedure-SP
 Mỗi thủ tục đều có tên, có thể có tham số truyền vào,
tham số trả giá trị về. Ngoài ra bên trong thân của một
SP chúng ta cũng có thể gọi thực thi một SP khác đã
được tạo trước đó. Phạm vi hoạt động của các SP là
cục bộ bên trong một CSDL lưu trữ thủ tục đó.
Tạo mới một thủ tục
 Cú pháp:
CREATE PROC[EDURE] <tên thủ tục>[Các tham số]
AS
[DECLARE <biến cục bộ>]
<Các lệnh SQL>
CHẠY THỰC HIỆN THỦ TỤC
EXEC[UTE] <tên thủ tục> [các tham số]
Tạo mới một thủ tục
 Trong đó:
 Tên thủ tục: Là tên thủ tục được tạo mới, tên thủ tục này phải là duy nhất
trong một CSDL.
 Các tham số: Là các tham số dùng để tiếp nhận các giá trị bên ngoài đưa
vào thủ tục. Các tham số này được khai báo như sau: @<tên tham số>
<kiểu dữ liệu> [độ dài].
 Biến cục bộ: Là những biến chỉ được sử dụng bên trong thủ tục, khi ra
khỏi thủ tục thì những biến này không còn tồn tại nữa.
 Các lệnh SQL: Là các lệnh T-SQL dùng để xử lý, tính toán theo yêu cầu
của người sử dụng.
 EXEC[UTE] <tên thủ tục> [các tham số]
Tạo mới một thủ tục
 Ví dụ: MONHOC (MAMH, TENMH, SOTIET)
CREATE PROCEDURE ds_mh
AS
SELECT MAMH, TENMH
FROM MONHOC
WHERE SOTIET>45
Gọi thực thi thủ tục:
Exec ds_mh
Tạo mới một thủ tục
 Ví dụ:
LOP (MALOP, TENLOP, SISO)
SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP)
CREATE PROC CAPNHAT_SS
AS
UPDATE LOP
SET SISO=(SELECT COUNT(*)
FROM SINHVIEN
WHERE SINHVIEN.MALOP=LOP.MALOP
GROUP BY SINHVIEN.MALOP)
GOI THU TUC:
EXEC CAPNHAT_SS
Thủ tục có tham số
 Tham số đầu vào: có chức năng nhận các giá trị truyền vào từ bên ngoài
thủ tục để thực hiện các xử lý bên trong thủ tục.
 Ví dụ: Viết thủ tục nhập vào mã số sinh viên sẽ in ra kết quả học tập
(DIEM) của sinh viên đó.
 KETQUA (MASV, MAMH, DIEM)
CREATE PROC KQ_SV @MASV CHAR(4)
AS
SELECT MASV, MAMH, DIEM
FROM KETQUA
WHERE MASV=@MASV
Gọi thực hiện: EXEC KQ_SV ‘SV01’
Thủ tục có tham số
 Tham số đầu ra: Tham số đầu ra là những tham số mà giá trị của nó
sẽ được tính toán từ bên trong thủ tục và sẽ được giữ nguyên sau
khi thoát ra khỏi thủ tục.
 Tham số đầu ra được gắn với từ khoá OUTPUT trong lúc tạo thủ tục.
 Ví dụ:
CREATE PROC XEM_DIEM @MASV CHAR(4), @MAMH CHAR(4),
@DIEM INT OUTPUT
AS
SELECT @DIEM=DIEM
FROM KETQUA
WHERE MASV=@MASV AND MAMH=@MAMH
Thủ tục có tham số
 Thực hiện gọi thủ tục như sau:
DECLARE @DIEMSV INT
EXEC XEM_DIEM ‘SV02' , 'M01‘ @DIEMSV OUTPUT
PRINT @DIEMSV
Lệnh Return
 Lệnh RETURN được sử dụng bên trong thủ tục thường
dùng để thoát ra khỏi thủ tục trong các trường hợp dữ
liệu không hợp lệ. Ngoài ra lệnh RETURN cũng cho phép
trả về một số nguyên tại nơi đã gọi thực hiện thủ tục.
Ví dụ: SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP)
CREATE PROC TT_SV @MASV CHAR(10)=NULL
AS
IF @MASV IS NULL
BEGIN
PRINT 'Hay nhap ma sinh viên'
RETURN
END
ELSE
BEGIN
SELECT HOTEN,NGSINH,DCHI,GIOITINH
FROM SINHVIEN
WHERE MASV=@MASV
END
EXEC TT_SV ‘SV01’
Thủ tục
 Xóa
 DROP PROC[EDURE] <tên thủ tục>
 Ví dụ:
DROP PROC ds_mh
 Sửa
 ALTER PROC[EDURE] <tên thủ tục>[các tham số]
AS
[DECLARE <biến cục bộ>]
<Các lệnh SQL>
Thủ tục
 Mã hóa nội dung
CREATE | ALTER PROC[EDURE] <tên thủ tục>[các tham số]
WITH ENCRYPTION
AS
[DECLARE <biến cục bộ>]
<Các lệnh SQL>
 Ví dụ: MONHOC (MAMH, TENMH, SOTIET)
CREATE PROC TT_MH @MAMH CHAR(20)=‘ ’
WITH ENCRYPTION
AS
SELECT TENMH,SOTIET
FROM MONHOC
WHERE MAMH=@MAMH
EXEC TT_MH ‘M01’
Trigger
 Trigger là một cấu trúc lệnh T-SQL đặc biệt có khả năng thực thi
một cách tự động mỗi khi dữ liệu trên bảng liên quan với trigger bị
thay đổi.
 Trigger khác với thủ tục là không có tham số, không cần gọi thực
hiện bằng lệnh EXECUTE mà sẽ được kích hoạt tương ứng với
các hành động thay đổi dữ liệu (thêm, xoá, sửa).
 Cấu trúc lệnh trigger được dùng để kiểm tra sự toàn vẹn dữ liệu
nghĩa là kiểm tra được tất cả các ràng buộc toàn vẹn có trong
CSDL. Chúng ta chỉ nên sử dụng trigger cho những ràng buộc kiểm
tra phức tạp trên dữ liệu
Hoạt động của Trigger
 Mỗi trigger khi được định nghĩa phải chỉ định trigger đó thuộc bảng dữ liệu nào
và chỉ được kích hoạt khi người sử dụng tác động (thêm, xoá, sửa) trên bảng dữ
liệu đó.
 Khi một hành động thêm (INSERT) dữ liệu vào bảng xảy ra thì trigger tương ứng
với hành động này sẽ được kích hoạt. Khi đó hệ thống sẽ phát sinh ra một bảng
phụ có tên là INSERTED để chứa một dòng dữ liệu mới mà người dùng muốn
thêm vào bảng.
 Khi xoá (DELETE) một dòng dữ liệu trên bảng thì trigger tương ứng với hành động
này sẽ được kích hoạt. Khi đó một bảng phụ tên là DELETED được phát sinh để
chứa dòng dữ liệu mà người dùng muốn xoá đi.
 Khi sửa đổi (UPDATE) dữ liệu trên một bảng thì trigger tương ứng với hành động
này sẽ được kích hoạt. Khi đó hệ thống sẽ phát sinh ra 2 bảng phụ: một bảng để
chứa dữ liệu mới cần sửa có tên là INSERTED, bảng còn lại dùng để chứa dữ liệu
cũ cần bỏ đi có tên là DELETED.
Tạo Trigger
 Cấu trúc
CREATE TRIGGER <tên trigger> ON <tên bảng>
[WITH ENCRYPTION]
FOR <biến cố kích hoạt>
AS
<Các lệnh T-SQL>
 Tên trigger: Là tên của trigger cần tạo, tên này phải duy nhất trong
một CSDL.
 Mệnh đề ON: Chỉ ra rằng trigger này đang viết cho bảng dữ liệu nào.
 Tên bảng: Là tên của bảng dữ liệu cần tạo trigger trên đó.
Tạo Trigger
 Mệnh đề WITH ENCRYPTION: Dùng để mã hoá nội dung trigger.
 Mệnh đề FOR : Dùng để chỉ ra rằng trigger sẽ áp dụng cho hành
động nào trong 3 hành động: INSERT, DELETE, UPDATE.
 Biến cố kích hoạt: là các biến cố xảy ra khi người sử dụng tác động
vào CSDL.
 Các lệnh T-SQL: là các lệnh SQL thực hiện các xử lý trong trigger,
một số lệnh sau đây không được sử dụng trong trigger: ALTER
DATABASSE, CREATE DATABASE, DROP DATABASE…
Insert Trigger
 Ví dụ:
LOP (MALOP, TENLOP, SISO)
CREATE TRIGGER KTRA_SISO ON LOP
FOR INSERT
AS
IF (SELECT SISO FROM INSERTED)<0
BEGIN
PRINT 'SISO cua lop phai > 0'
ROLLBACK TRAN
END
 FOR INSERT để chỉ ra rằng trigger này chỉ hoạt động cho hành động insert dữ liệu
vào bảng LOP. Mệnh đề IF(SELECT SISO FROM INSERTED)<0 sẽ kiểm tra nếu dữ
liệu (SISO) trong bảng tạm nhỏ hơn 0 thì quay lui giao tác (ROLLBACK TRAN) khi đó
dữ liệu sẽ không được chèn vào bảng.
Insert Trigger
 Ví dụ:
LOP (MALOP, TENLOP, SISO)
SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP)
CREATE TRIGGER CAPNHAT_SISO ON SINHVIEN
FOR INSERT
AS
UPDATE LOP
SET SISO=(SELECT COUNT(*)
FROM SINHVIEN
WHERE SINHVIEN.MALOP=LOP.MALOP
GROUP BY SINHVIEN.MALOP)
Delete Trigger
Ví dụ:
SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP)
CREATE TRIGGER CHUYEN_DL ON SINHVIEN
FOR DELETE
AS
INSERT INTO SV_XOA
SELECT * FROM DELETED
Update Trigger
Ví dụ: SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP, DTB)
KETQUA(MASV,MAMH,DIEM)
CREATE TRIGGER CN_DIEM ON KETQUA
FOR UPDATE
AS
BEGIN
UPDATE SINHVIEN
SET DTB=(SELECT AVG(DIEM)
FROM KETQUA
WHERE KETQUA.MASV=SINHVIEN.MASV
GROUP BY KETQUA.MASV)
SELECT * FROM SINHVIEN
END
Trigger với nhiều hành động
Ví dụ:
KETQUA (MASV, MAMH, DIEM)
SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP, DTB)
CREATE TRIGGER CN_DIEM ON KETQUA
FOR INSERT, UPDATE, DELETE
AS
BEGIN
UPDATE SINHVIEN
SET DTB=(SELECT AVG(DIEM)
FROM KETQUA
WHERE KETQUA.MASV=SINHVIEN.MASV
GROUP BY SINHVIEN.MASV)
SELECT * FROM SINHVIEN
Xem nội dung trigger
 Khởi động trình ứng dụng Enterprise Manager > mở rộng danh
mục CSDL cần xem trigger > chọn đối tượng tables > nhấp chuột
phải vào bảng cần xem trigger > chọn All Tasks > chọn Manage
Triggers
 Cú pháp:
sp_helptext <tên trigger>
 Ví dụ:
sp_helptext KTRA_SISO
 Kiểm tra số trigger trên bảng
sp_helptrigger <tên bảng>
Trigger
 Xóa
DROP TRIGGER <danh sách tên trigger>
 Thay đổi nội dung trigger
ALTER TRIGGER <tên trigger> ON <tên bảng>
[WITH ENCRYPTION]
FOR <biến cố kích hoạt>
AS
<Các lệnh T-SQL>
 Tắt bật hoạt động của trigger
ALTER TABLE <tên bảng>
DISABLE | ENABLE TRIGGER <tên trigger>
HÀM RAISERROR
 Ý nghĩa : Trả thông báo lỗi về cho ứng dụng
 Cú pháp : Raiserror(tbao_loi, muc_do, trang_thai [,
cac_tham_so] )
 Thông báo lỗi :
 Mã thông báo lỗi do người dùng định nghĩa trước
 Chuỗi thông báo lỗi bất kỳ.
 Mức độ:
 Số có giá trị từ 0 tới 25 thể hiện mức độ nghiêm trọng
của lỗi.
 Trạng thái: Số từ 1-127 để xác định vị trí lỗi khi sử dụng
cùng một thống báo lỗi tại nhiều điểm khác nhau
HÀM RAISERROR
DECLARE @DIEMTB FLOAT
SET @DIEMTB= (SELECT DIEMTB FROM SINHVIEN
WHERE MASV='SV02')
IF (@DIEMTB NOT BETWEEN 0 AND 10)
BEGIN
RAISERROR('DIEM THI PHAI TU 0-10',16,1)
END
BACK UP VÀ RESTORE CSDL
LỆNH BACK UP CSDL
 BACK UP DATABASE TENCSDL TO
DISK =‘’DUONG DANTENFILE.BAK’
 BACK UP DATABASE QLBH TO DISK
=’D:BKQLBH.BAK’
RESTORE DATABASE
GÕ TÊN DATABASE TO DATABASE SAU ĐÓ CHỌN NƠI
CHỨA DATABASE BACKUP BẰNG CÁCH CHỌN FROM
DIVICE
Click Add , sau đó tìm đến nới chứa và chọn
file backup (*.bak). Sau đó bấm OK.
Click chọn database tương ứng bằng cách tích vào
như hình dưới. Sau đó bấm OK để hoàn tất restore

Mais conteúdo relacionado

Semelhante a slide_Chuong 3_ (1).ppt

bai in.docx
bai in.docxbai in.docx
bai in.docxtrantp
 
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTBài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTMasterCode.vn
 
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02huynhtrong774129
 
Tối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlTối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlViet Tran
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Vo Oanh
 
csdl-trigger
csdl-triggercsdl-trigger
csdl-triggerkikihoho
 
Giới thiệu hệ quản trị csdl oracle và thủ tục
Giới thiệu hệ quản trị csdl oracle và thủ tụcGiới thiệu hệ quản trị csdl oracle và thủ tục
Giới thiệu hệ quản trị csdl oracle và thủ tụcThoL718186
 
Store procedure
Store procedureStore procedure
Store procedurejvinhit
 
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTBài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTMasterCode.vn
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Kuli An
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLMasterCode.vn
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4pisu412
 
b6-190213084710.pdf
b6-190213084710.pdfb6-190213084710.pdf
b6-190213084710.pdfQuyVo27
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Dũng Đinh
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comphanleson
 

Semelhante a slide_Chuong 3_ (1).ppt (20)

bai in.docx
bai in.docxbai in.docx
bai in.docx
 
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPTBài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT
 
Phan3
Phan3Phan3
Phan3
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02
 
Tip oracle
Tip oracleTip oracle
Tip oracle
 
Tối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sqlTối ưu-cau-lệnh-oracle-sql
Tối ưu-cau-lệnh-oracle-sql
 
SQL injection
SQL injectionSQL injection
SQL injection
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
 
csdl-trigger
csdl-triggercsdl-trigger
csdl-trigger
 
Giới thiệu hệ quản trị csdl oracle và thủ tục
Giới thiệu hệ quản trị csdl oracle và thủ tụcGiới thiệu hệ quản trị csdl oracle và thủ tục
Giới thiệu hệ quản trị csdl oracle và thủ tục
 
Store procedure
Store procedureStore procedure
Store procedure
 
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTBài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQL
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 4
 
b6-190213084710.pdf
b6-190213084710.pdfb6-190213084710.pdf
b6-190213084710.pdf
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1
 
Access vba 052009
Access vba 052009Access vba 052009
Access vba 052009
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.com
 

slide_Chuong 3_ (1).ppt

  • 1. Thủ tục thường trú  Khái niệm: Thủ tục thường trú (Store Procedure-SP) là một tập hợp chứa các dòng lệnh, các biến và các cấu trúc điều khiển trong ngôn ngữ T-SQL dùng để thực hiện một hành động nào đó. Nội dung của SP sẽ được lưu trữ tại cơ sở dữ liệu của Microsoft SQL Server.  Khi một câu lệnh gọi chạy stored procedure lần đầu tiên thì SQL Server sẽ chạy nó và lưu trữ vào bộ nhớ đệm, những lần tiếp theo SQL Server sẽ sử dụng lại nên sẽ cho tốc độ xử lý tối ưu.
  • 2. Store Procedure-SP  Nhanh:SP có khả năng phân tích cú pháp và tối ưu hóa trong lần thực thi đầu tiên, một phiên bản dịch của chúng trong đó sẽ được lưu trong bộ nhớ để sử dụng cho lần sau. Tức là nó không cần phải phân tích cú pháp và tối ưu lại, mà sẽ sử dụng kết quả đã được biên dịch trong lần đầu tiên. Do đó stored procedure có khả năng thực thi nhanh hơn là việc xử lý một đoạn lệnh Transaction – SQL lớn, lặp
  • 3. Store Procedure-SP  Bảo mật: Phân cấp ,giới hạn quyền cho các user thậm chí họ không được phép thực thi trực tiếp những stored procedure này. Khi đó sẽ hạn chế, loại bỏ các vấn đề xâm phạm dữ liệu không được cấp phép
  • 4. Store Procedure-SP  Mỗi thủ tục đều có tên, có thể có tham số truyền vào, tham số trả giá trị về. Ngoài ra bên trong thân của một SP chúng ta cũng có thể gọi thực thi một SP khác đã được tạo trước đó. Phạm vi hoạt động của các SP là cục bộ bên trong một CSDL lưu trữ thủ tục đó.
  • 5. Tạo mới một thủ tục  Cú pháp: CREATE PROC[EDURE] <tên thủ tục>[Các tham số] AS [DECLARE <biến cục bộ>] <Các lệnh SQL> CHẠY THỰC HIỆN THỦ TỤC EXEC[UTE] <tên thủ tục> [các tham số]
  • 6. Tạo mới một thủ tục  Trong đó:  Tên thủ tục: Là tên thủ tục được tạo mới, tên thủ tục này phải là duy nhất trong một CSDL.  Các tham số: Là các tham số dùng để tiếp nhận các giá trị bên ngoài đưa vào thủ tục. Các tham số này được khai báo như sau: @<tên tham số> <kiểu dữ liệu> [độ dài].  Biến cục bộ: Là những biến chỉ được sử dụng bên trong thủ tục, khi ra khỏi thủ tục thì những biến này không còn tồn tại nữa.  Các lệnh SQL: Là các lệnh T-SQL dùng để xử lý, tính toán theo yêu cầu của người sử dụng.  EXEC[UTE] <tên thủ tục> [các tham số]
  • 7. Tạo mới một thủ tục  Ví dụ: MONHOC (MAMH, TENMH, SOTIET) CREATE PROCEDURE ds_mh AS SELECT MAMH, TENMH FROM MONHOC WHERE SOTIET>45 Gọi thực thi thủ tục: Exec ds_mh
  • 8. Tạo mới một thủ tục  Ví dụ: LOP (MALOP, TENLOP, SISO) SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP) CREATE PROC CAPNHAT_SS AS UPDATE LOP SET SISO=(SELECT COUNT(*) FROM SINHVIEN WHERE SINHVIEN.MALOP=LOP.MALOP GROUP BY SINHVIEN.MALOP) GOI THU TUC: EXEC CAPNHAT_SS
  • 9. Thủ tục có tham số  Tham số đầu vào: có chức năng nhận các giá trị truyền vào từ bên ngoài thủ tục để thực hiện các xử lý bên trong thủ tục.  Ví dụ: Viết thủ tục nhập vào mã số sinh viên sẽ in ra kết quả học tập (DIEM) của sinh viên đó.  KETQUA (MASV, MAMH, DIEM) CREATE PROC KQ_SV @MASV CHAR(4) AS SELECT MASV, MAMH, DIEM FROM KETQUA WHERE MASV=@MASV Gọi thực hiện: EXEC KQ_SV ‘SV01’
  • 10. Thủ tục có tham số  Tham số đầu ra: Tham số đầu ra là những tham số mà giá trị của nó sẽ được tính toán từ bên trong thủ tục và sẽ được giữ nguyên sau khi thoát ra khỏi thủ tục.  Tham số đầu ra được gắn với từ khoá OUTPUT trong lúc tạo thủ tục.  Ví dụ: CREATE PROC XEM_DIEM @MASV CHAR(4), @MAMH CHAR(4), @DIEM INT OUTPUT AS SELECT @DIEM=DIEM FROM KETQUA WHERE MASV=@MASV AND MAMH=@MAMH
  • 11. Thủ tục có tham số  Thực hiện gọi thủ tục như sau: DECLARE @DIEMSV INT EXEC XEM_DIEM ‘SV02' , 'M01‘ @DIEMSV OUTPUT PRINT @DIEMSV
  • 12. Lệnh Return  Lệnh RETURN được sử dụng bên trong thủ tục thường dùng để thoát ra khỏi thủ tục trong các trường hợp dữ liệu không hợp lệ. Ngoài ra lệnh RETURN cũng cho phép trả về một số nguyên tại nơi đã gọi thực hiện thủ tục. Ví dụ: SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP) CREATE PROC TT_SV @MASV CHAR(10)=NULL AS IF @MASV IS NULL BEGIN PRINT 'Hay nhap ma sinh viên' RETURN END ELSE BEGIN SELECT HOTEN,NGSINH,DCHI,GIOITINH FROM SINHVIEN WHERE MASV=@MASV END EXEC TT_SV ‘SV01’
  • 13. Thủ tục  Xóa  DROP PROC[EDURE] <tên thủ tục>  Ví dụ: DROP PROC ds_mh  Sửa  ALTER PROC[EDURE] <tên thủ tục>[các tham số] AS [DECLARE <biến cục bộ>] <Các lệnh SQL>
  • 14. Thủ tục  Mã hóa nội dung CREATE | ALTER PROC[EDURE] <tên thủ tục>[các tham số] WITH ENCRYPTION AS [DECLARE <biến cục bộ>] <Các lệnh SQL>  Ví dụ: MONHOC (MAMH, TENMH, SOTIET) CREATE PROC TT_MH @MAMH CHAR(20)=‘ ’ WITH ENCRYPTION AS SELECT TENMH,SOTIET FROM MONHOC WHERE MAMH=@MAMH EXEC TT_MH ‘M01’
  • 15. Trigger  Trigger là một cấu trúc lệnh T-SQL đặc biệt có khả năng thực thi một cách tự động mỗi khi dữ liệu trên bảng liên quan với trigger bị thay đổi.  Trigger khác với thủ tục là không có tham số, không cần gọi thực hiện bằng lệnh EXECUTE mà sẽ được kích hoạt tương ứng với các hành động thay đổi dữ liệu (thêm, xoá, sửa).  Cấu trúc lệnh trigger được dùng để kiểm tra sự toàn vẹn dữ liệu nghĩa là kiểm tra được tất cả các ràng buộc toàn vẹn có trong CSDL. Chúng ta chỉ nên sử dụng trigger cho những ràng buộc kiểm tra phức tạp trên dữ liệu
  • 16. Hoạt động của Trigger  Mỗi trigger khi được định nghĩa phải chỉ định trigger đó thuộc bảng dữ liệu nào và chỉ được kích hoạt khi người sử dụng tác động (thêm, xoá, sửa) trên bảng dữ liệu đó.  Khi một hành động thêm (INSERT) dữ liệu vào bảng xảy ra thì trigger tương ứng với hành động này sẽ được kích hoạt. Khi đó hệ thống sẽ phát sinh ra một bảng phụ có tên là INSERTED để chứa một dòng dữ liệu mới mà người dùng muốn thêm vào bảng.  Khi xoá (DELETE) một dòng dữ liệu trên bảng thì trigger tương ứng với hành động này sẽ được kích hoạt. Khi đó một bảng phụ tên là DELETED được phát sinh để chứa dòng dữ liệu mà người dùng muốn xoá đi.  Khi sửa đổi (UPDATE) dữ liệu trên một bảng thì trigger tương ứng với hành động này sẽ được kích hoạt. Khi đó hệ thống sẽ phát sinh ra 2 bảng phụ: một bảng để chứa dữ liệu mới cần sửa có tên là INSERTED, bảng còn lại dùng để chứa dữ liệu cũ cần bỏ đi có tên là DELETED.
  • 17. Tạo Trigger  Cấu trúc CREATE TRIGGER <tên trigger> ON <tên bảng> [WITH ENCRYPTION] FOR <biến cố kích hoạt> AS <Các lệnh T-SQL>  Tên trigger: Là tên của trigger cần tạo, tên này phải duy nhất trong một CSDL.  Mệnh đề ON: Chỉ ra rằng trigger này đang viết cho bảng dữ liệu nào.  Tên bảng: Là tên của bảng dữ liệu cần tạo trigger trên đó.
  • 18. Tạo Trigger  Mệnh đề WITH ENCRYPTION: Dùng để mã hoá nội dung trigger.  Mệnh đề FOR : Dùng để chỉ ra rằng trigger sẽ áp dụng cho hành động nào trong 3 hành động: INSERT, DELETE, UPDATE.  Biến cố kích hoạt: là các biến cố xảy ra khi người sử dụng tác động vào CSDL.  Các lệnh T-SQL: là các lệnh SQL thực hiện các xử lý trong trigger, một số lệnh sau đây không được sử dụng trong trigger: ALTER DATABASSE, CREATE DATABASE, DROP DATABASE…
  • 19. Insert Trigger  Ví dụ: LOP (MALOP, TENLOP, SISO) CREATE TRIGGER KTRA_SISO ON LOP FOR INSERT AS IF (SELECT SISO FROM INSERTED)<0 BEGIN PRINT 'SISO cua lop phai > 0' ROLLBACK TRAN END  FOR INSERT để chỉ ra rằng trigger này chỉ hoạt động cho hành động insert dữ liệu vào bảng LOP. Mệnh đề IF(SELECT SISO FROM INSERTED)<0 sẽ kiểm tra nếu dữ liệu (SISO) trong bảng tạm nhỏ hơn 0 thì quay lui giao tác (ROLLBACK TRAN) khi đó dữ liệu sẽ không được chèn vào bảng.
  • 20. Insert Trigger  Ví dụ: LOP (MALOP, TENLOP, SISO) SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP) CREATE TRIGGER CAPNHAT_SISO ON SINHVIEN FOR INSERT AS UPDATE LOP SET SISO=(SELECT COUNT(*) FROM SINHVIEN WHERE SINHVIEN.MALOP=LOP.MALOP GROUP BY SINHVIEN.MALOP)
  • 21. Delete Trigger Ví dụ: SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP) CREATE TRIGGER CHUYEN_DL ON SINHVIEN FOR DELETE AS INSERT INTO SV_XOA SELECT * FROM DELETED
  • 22. Update Trigger Ví dụ: SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP, DTB) KETQUA(MASV,MAMH,DIEM) CREATE TRIGGER CN_DIEM ON KETQUA FOR UPDATE AS BEGIN UPDATE SINHVIEN SET DTB=(SELECT AVG(DIEM) FROM KETQUA WHERE KETQUA.MASV=SINHVIEN.MASV GROUP BY KETQUA.MASV) SELECT * FROM SINHVIEN END
  • 23. Trigger với nhiều hành động Ví dụ: KETQUA (MASV, MAMH, DIEM) SINHVIEN (MASV, HOTEN, NGSINH, DCHI, GIOITINH, MALOP, DTB) CREATE TRIGGER CN_DIEM ON KETQUA FOR INSERT, UPDATE, DELETE AS BEGIN UPDATE SINHVIEN SET DTB=(SELECT AVG(DIEM) FROM KETQUA WHERE KETQUA.MASV=SINHVIEN.MASV GROUP BY SINHVIEN.MASV) SELECT * FROM SINHVIEN
  • 24. Xem nội dung trigger  Khởi động trình ứng dụng Enterprise Manager > mở rộng danh mục CSDL cần xem trigger > chọn đối tượng tables > nhấp chuột phải vào bảng cần xem trigger > chọn All Tasks > chọn Manage Triggers  Cú pháp: sp_helptext <tên trigger>  Ví dụ: sp_helptext KTRA_SISO  Kiểm tra số trigger trên bảng sp_helptrigger <tên bảng>
  • 25. Trigger  Xóa DROP TRIGGER <danh sách tên trigger>  Thay đổi nội dung trigger ALTER TRIGGER <tên trigger> ON <tên bảng> [WITH ENCRYPTION] FOR <biến cố kích hoạt> AS <Các lệnh T-SQL>  Tắt bật hoạt động của trigger ALTER TABLE <tên bảng> DISABLE | ENABLE TRIGGER <tên trigger>
  • 26. HÀM RAISERROR  Ý nghĩa : Trả thông báo lỗi về cho ứng dụng  Cú pháp : Raiserror(tbao_loi, muc_do, trang_thai [, cac_tham_so] )  Thông báo lỗi :  Mã thông báo lỗi do người dùng định nghĩa trước  Chuỗi thông báo lỗi bất kỳ.  Mức độ:  Số có giá trị từ 0 tới 25 thể hiện mức độ nghiêm trọng của lỗi.  Trạng thái: Số từ 1-127 để xác định vị trí lỗi khi sử dụng cùng một thống báo lỗi tại nhiều điểm khác nhau
  • 27. HÀM RAISERROR DECLARE @DIEMTB FLOAT SET @DIEMTB= (SELECT DIEMTB FROM SINHVIEN WHERE MASV='SV02') IF (@DIEMTB NOT BETWEEN 0 AND 10) BEGIN RAISERROR('DIEM THI PHAI TU 0-10',16,1) END
  • 28. BACK UP VÀ RESTORE CSDL
  • 29.
  • 30. LỆNH BACK UP CSDL  BACK UP DATABASE TENCSDL TO DISK =‘’DUONG DANTENFILE.BAK’  BACK UP DATABASE QLBH TO DISK =’D:BKQLBH.BAK’
  • 32. GÕ TÊN DATABASE TO DATABASE SAU ĐÓ CHỌN NƠI CHỨA DATABASE BACKUP BẰNG CÁCH CHỌN FROM DIVICE
  • 33. Click Add , sau đó tìm đến nới chứa và chọn file backup (*.bak). Sau đó bấm OK.
  • 34. Click chọn database tương ứng bằng cách tích vào như hình dưới. Sau đó bấm OK để hoàn tất restore