THỦ TỤC LƯU TRỮ STORE PROCEDUCEGiới thiệu Để thuận lợi hơn trong việc sử dụng các câu lệnh có cấu trúc, và đáp ứng nhucầu khai thác dữ liệu của người dùng.. User-defined Stored Procedure
Trang 1ỦY BAN NHÂN DÂN TỈNH BR – VTTRƯỜNG CAO ĐẲNG NGHỀ
GIÁO TRÌNH
MÔ ĐUN HỆ QUẢN TRỊ CSDL MS SQL SERVER 2
TRÌNH ĐỘ CAO ĐẲNG NGHỀ
Ban hành kèm theo Quyết định số: /QĐ-CĐN… ngày…….tháng….năm
………… của Hiệu trưởng trường Cao đẳng nghề tỉnh BR - VT
Trang 2Bà Rịa – Vũng Tàu, năm 2015
Trang 3LỜI GIỚI THIỆU
Công nghệ thông tin ngày càng phát triển và thậm nhập vào nhiều lĩnh vực trongcuộc sống Song song với sự phát triển đó, là nhu cầu quản lý dữ liệu ngày càng chặtchẽ Microsoft® SQL Server™ được ví như là trái tim của một nền tảng dữ liệu toàndiện, cho phép bạn có thể truy cập và gia công dữ liệu cho doanh nghiệp từ các thiết bịkhác nhau, các nền tảng và dịch vụ dữ liệu trong doanh nghiệp
Vì vậy tác giả đã biên soạn cuốn giáo trình Hệ quản trị CSDL MS SQL Server 2dùng cho học sinh cao đẳng nghề, ngoài ra nó còn là cuốn sách tham khảo của nhiềuđộc giả muốn tìm hiểu về SQL Server
Mục đích của giáo trình là trang bị cho học viên những kiến thức và kỹ năng vềxây dựngcác ứng dụng chuyên nghiệp theo mô hình Client/Server trên hệ quản trị cơ
sở dữ liệu MS SQL Server; quản trị được hệ quản trị cơ sở dữ liệu MS SQL Server từxa
Nội dung chính của giáo trình gồm các phần chính: Thủ tục lưu trữ (Store
Proceduce), Trigger, Hàm (Function), Bảo mật trong SQL Server và kết nối ứng dụngvới cơ sở dữ liệu
Mặc dù bản thân đã tham khảo các tài liệu và ý kiến tham gia của các đồng nghiệp,song cuốn giáo trình vẫn không tránh khỏi những thiếu sót Mong các bạn đóng góp ýkiến
Tôi xin cảm ơn các thầy cô khoa CNTT–Trường Cao đẳng nghề đã cho tôi các ýkiến đóng góp quý báu để tôi hoàn thiện giáo trình này
TÁC GIẢ
Trang 4MỤC LỤC
BÀI 1: THỦ TỤC LƯU TRỮ (STORE PROCEDUCE) 9
1 Định nghĩa 9
2 Lợi ích khi quản lý dữ liệu bằng SPs 10
3 Các kiểu SPs 10
3.1 System stored procedures 10
3.2 User-defined Stored Procedure 12
a Cú pháp: 12
b Thực hiện User-defined Stored Procedures 12
c Sử dụng biến trong Stored Procedures 12
d Biên dịch lại - Re-compiling Stored Procedures 13
e Sửa cấu trúc của Stored Procedures 14
f Thông báo lỗi 14
BÀI 2 : TRIGGER 17
1 Giới thiệu Trigger 17
2 Tạo Insert trigger 18
3 Tạo Delete Trigger 18
4 Tạo Update trigger 19
4.1 Tạo Table Level Update Trigger 19
4.2 Tạo Column Level Update Trigger 20
5 Tạo Trigger có lựa chọn Encryption 20
6 Hiển thị danh sách các trigger trong DB 21
7 Sử dụng trigger để cài đặt Ràng buộc tham chiếu 22
8 Cascade Delete sử dụng Nested trigger 22
9 Instead of trigger 23
Câu hỏi và bài tập 25
BÀI 3: HÀM (FUNCTION) 26
1 Khái niệm 26
2 Hàm với giá trị trả về là "dữ liệu kiểu bảng" 28
BÀI 4 BẢO MẬT TRONG SQL SERVER 30
1 Các khái niệm 30
2 Cấp phát quyền 31
2.1 Cấp phát quyền cho người dùng trên các đối tượng CSDL 31
2.2 Cấp phát quyền thực thi các câu lệnh 33
3 Thu hồi quyền 33
3.1 Thu hồi quyền trên đối tượng cơ sở dữ liệu 34
3.2 Thu hồi quyền thực thi các câu lệnh 35
BÀI 5 KẾT NỐI ỨNG DỤNG VỚI CƠ SỞ DỮ LIỆU 36
1 Công nghệ Open Database Connectivity (ODBC) 36
1.1 Tạo nguồn dữ liệu ODBC 36
1.2 Tạo System DSN 37
2 Công nghệ OLE DB (Object Linking and Embedding Data Base) 38
Trang 53 Công nghệ DAO (Data Access Object) 39
4 Công nghệ Remote Data Access Object (RDO) 46
5 Thiết lập kết nối dùng đối tượng RDOConnection 49
6 Công nghệ ActiveX Data Object (ADO) 50
TÀI LIỆU THAM KHẢO 59
Trang 6DANH MỤC HÌ
Hình 1.1: Các thành phần của SPs 9
Hình 1.2 Các loại của System stored procedures 11
Hình 1.3 Thực hiện User-defined Stored Procedures có biến 13
Y Hình 2.1:Kết quả thực hiện Delete trigger 19
Hình 2.2:Kết quả thực hiện Table level Update trigger 20
Hình 2.3:Kết quả thực hiện Column Level Update trigger 20
Hình 2.4:Kết quả thực hiện Encryption trigger 21
Hình 2.5:Hiển thị trigger trong DB 21
Hình 5.1: Mô hình lập trình CSDL Client Server dùng RDO và ADO 49
Hình 5.2: Truy cập CSDL từ trình ứng dụng và trình duyệt Web theo ADO 49
Hình 5.3: Mô hình ADO 50
Trang 7CHƯƠNG TRÌNH MÔ ĐUN HỆ QUẢN TRỊ CSDL MS SQL SERVER 2
Mã số mô đun: MĐ 19
Thời gian mô đun: 75giờ (Lý thuyết: 30 giờ; Thực hành: 45 giờ)
I VỊ TRÍ, TÍNH CHẤT CỦA MÔ ĐUN
Vị trí :
Mô đun Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2 là mô đun nâng cao của
mô đun Hệ quản trị cơ sở dữ liệu Microsoft SQL Server 1 mà người học đã được họctrong giai đoạn 1
Tính chất :
Để học tốt mô đun này bắt buộc người học cần học qua mô đun Hệ quản trị cơ
sở dữ liệu Microsoft SQL Server 1
II MỤC TIÊU MÔ ĐUN
- Xây dựng được các ứng dụng chuyên nghiệp theo mô hình Client/Server trên hệquản trị cơ sở dữ liệu MS SQL Server
- Quản trị được hệ quản trị cơ sở dữ liệu MS SQL Server từ xa
- Thực hiện đựợc các biện pháp an toàn cho máy tính và vệ sinh công nghiệp
III NỘI DUNG MÔ ĐUN
1 Nội dung tổng quát và phân phối thời gian:
Số
Tên các bài trong mô đun
Thời gianT
Thựchành
Kiểmtra*
5 Kết nối ứng dụng với cơ sở dữ liệu 15 6 9
Trang 8THỦ TỤC LƯU TRỮ (STORE PROCEDUCE)
Giới thiệu
Để thuận lợi hơn trong việc sử dụng các câu lệnh có cấu trúc, và đáp ứng nhucầu khai thác dữ liệu của người dùng SQL server cung cấp một số thủ tục lưu trữ vàcho phép người dùng tự định nghĩa thêm các thủ tục lưu trữ
Mục tiêu
Định nghĩa được thủ tục lưu trữ với các kiểu tham số.
Sửa đổi được thủ tục đã định nghĩa.
SQL Server cung cấp một số các thủ tục được lưu trữ sẵn trong hệ thống giúp thực hiện một số công việc thường xuyên Nó được gọi là thủ tục hệ thống – System stored procedures Còn những thủ tục do người sử dụng tự viết gọi là User stored procedures.
SPs trong SQL Server cũng tương tự như khái niệm về thủ tục trong các ngôn ngữ lập trình khác, bởi vì:
Chấp nhận biến đầu vào và trả lại kết quả khi thực hiện.
Chứa những câu lệnh dùng trong lập trình có thể thao tác với cơ sở dữ liệu và
có thể gọi đến các thủ tục khác.
Trả lại giá trị trạng thái khi thủ tục được gọi để xác định việc thực hiện thủ tục thành công hay thất bại.
Hình 1.1: Các thành phần của SPs
Trang 92 Lợi ích khi quản lý dữ liệu bằng SPs
Tăng tốc độ thực hiện: Một trong những lợi ích lớn nhất khi sử dụng SPs là tốc
độ SPs được tối ưu hoá trong ngay ở lần biên dịch đầu tiên, điều này cho phépchúng có thể thực hiện nhanh hơn nhiều lần so với các câu lệnh T-SQL thôngthường
Tốc độ truy cập dữ liệu nhanh hơn: Khi thực thi một câu lệnh SQL thì SQLServer phải kiểm tra permission xem user gửi câu lệnh đó có được phép thực hiệncâu lệnh hay không đồng thời kiểm tra cú pháp rồi mới tạo ra một execute plan vàthực thi Nếu có nhiều câu lệnh như vậy gửi qua network có thể làm giảm đi tốc độlàm việc của server SQL Server sẽ làm việc hiệu quả hơn nếu dùng storedprocedure vì người gửi chỉ gửi một câu lệnh đơn và SQL Server chỉ kiểm tra mộtlần sau đó tạo ra một execute plan và thực thi Nếu stored procedure được gọinhiều lần thì execute plan có thể được sử dụng lại nên sẽ làm việc nhanh hơn.Ngoài ra cú pháp của các câu lệnh SQL đã được SQL Sever kiểm tra trước khi lưunên nó không cần kiểm lại khi thực thi
Chương trình được modul hoá: Một khi stored procedure được tạo ra nó có thểđược sử dụng lại Ðiều này sẽ làm cho việc bảo trì (maintainability) dễ dàng hơn
do việc tách rời giữa business rules (tức là những logic thể hiện bên trong storedprocedure) và cơ sở dữ liệu Ví dụ nếu có một sự thay đổi nào đó về mặt logic thì
ta chỉ việc thay đổi code bên trong stored procedure mà thôi Những ứng dụngdùng stored procedure này có thể sẽ không cần phải thay đổi mà vẫn tương thíchvới business rule mới
Nhất quán: Lợi ích nữa của SPs là thiết đặt được ràng buộc dữ liệu để đảm bảotính nhất quán Người sử dụng không thể thực hiện tuỳ tiện dữ liệu để làm mất tínhđúng đắn của dữ liệu
Nâng cao khả năng bảo mật dữ liệu: Giả sử chúng ta muốn giới hạn việc truyxuất dữ liệu trực tiếp của một user nào đó vào một số bảng, ta có thể viết mộtstored procedure để truy xuất dữ liệu và chỉ cho phép user đó được sử dụng storedprocedure đã viết sẵn mà thôi chứ không thể thao tác trực tiếp trên các bảng đó Ví
dụ, ta có thể tạo ra SPs để ta làm chủ và chỉ cung cấp quyền EXCUTE cho nhữngSPs này, vì thế những người sử dụng khác không được phép trực tiếp làm việc với
dữ liệu
Ngoài ra stored procedure có thể được encrypt (mã hóa) để tăng cường bảo mật
3 Các kiểu SPs
SPs chia làm 2 loại:
System stored procedures: Thủ tục m những người sử dụng chỉ có quyền thực
hiện, không được phép thay đổi
User stored procedures: Thủ tục do người sử dụng tạo và thực hiện
3.1 System stored procedures
Là những stored procedure chứa trong Master Database và thường bắt đầu bằngtiếp đầu ngữ sp_
Trang 10Các stored procedure này thuộc loại built-in và chủ yếu dùng trong việc quản lý cơ
sở dữ liệu (administration) và bảo mật (security) Ví dụ bạn có thể kiểm tra tất cả cácprocesses đang được sử dụng bởi user DomainName\Administrators bạn có thể dùng :
sp_who @loginame='DomainName\Administrators'
Người ta có thể chia các System stored procedures thành các loại sau:
Hình 1.2 Các loại của System stored procedures
Có hàng trăm system stored procedure trong SQL Server Bạn có thể xem chi tiếtphân loại và nội dung của từng thủ tục trong SQL Server Books Online
Sau đây là một số thủ tục hệ thống thường sử dụng:
System stored procedureChức năngsp_Databases
Danh sách những Database có thể (avaiable) trên Server (Danh sách này sẽ là khácnhau tuỳ t
Trang 11Thay đổi lựa ch
n cấu hình chung của SQL SERVER Khi người sử
ụng không lựa chọn thì hệ thống sẽ hiển th
Hiển thị nội dung (text) của các đối tượng
3.2 User-defined Stored Procedure
CREATE PROCEDURE London_Flights AS
PRINT 'This code displays the details of flights toLondon'
SELECT * FROM flight WHERE destination='Lon'
Ghi chú
- Tên thủ tục phải tuân theo quy tắc đặt tên
- Tất cả các đối tượng của cơ sở dữ liệu có thể được tạo trong SPs, trừ nhữngđối tượng: defaults, rules, triggers, procedures, và views
- Những đối tượng đã được tạo có thể được tham chiếu đến ngay khi nó đượctạo
- Stored procedures có thể tham chiếu tới những bảng phụ (temporary tables)
- Có thể có 2100 biến trong stored procedure
- Chúng ta có thể tạo nhiều biến địa phương trong stored procedure nếu bộnhớ cho phép
- Kích thước tối đa cho stored procedure là 128 MB
b Thực hiện User-defined Stored Procedures
Cú pháp: EXEC[UTE] procedure_name
Ví dụ: Thực hiện User-defined Stored Procedures có tên là London_Flights
EXEC[UTE] London_Flights
Trang 12c Sử dụng biến trong Stored Procedures
Biến có thể được sử dụng để nhập dữ liệu vào (INPUT) hoặc xuất dữ liệu ra ngoài(OUTPUT)
d Biên dịch lại - Re-compiling Stored Procedures
Khi người sử dụng làm thay đổi tới những index của bảng Stored procedures phảiđược biên dịch lại (recompiled) để chấp nhận những thay đổi đó
Có 3 cách để biên dịch lại procedures:
Cách 1: Sử dụng sp_recompile system stored procedure: Bạn có thể sử dụng cách
này để biên dịch lại thủ tục ở lần chạy kế tiếp của nó
Cú pháp:
‘object’
Cách 2: Chỉ ra WITH RECOMPILE trong câu lệnh CREATE PROCEDURE: SQL
Server sẽ biên dịch lại thủ tục ở mỗi lần nó thực hiện
Trang 13Cách 3: Chỉ ra WITH RECOMPILE trong câu lệnh EXECUTE:
Biên dịch lại ngay ở lần thực hiện này
Cú pháp: EXEC[UTE] procedure_name WITH RECOMPILE
e Sửa cấu trúc của Stored Procedures
Câu lệnh ALTER PROCEDURE được sử dụng để sửa SP
Cú pháp tương tự CREATE PROCEDURE chỉ thay từ CREATE bằng ALTER.Việc sửa chữa vẫn lưu lại quyền của người sử dụng (user permissions)
f Thông báo lỗi
Trả về mã lỗi (Code) hoặc câu lệnh RAISERROR có thể được sử dụng để nhắcngười sử dụng về lỗi
Mã lỗi trả về là số nguyên
Câu lệnh RAISERROR giải thích lỗi và chỉ ra mức độ lỗi.
Return codes là số nguyên, giá trị mặc định là 0
Giá trị của Return codes phải được trả về vào một biến
Vi dụ:
DECLARE @return_variable_name data_type
EXECUTE @return_variable_name = procedure_name
ALTER PROCEDURE Titles_Pub
Trang 14Ngoài việc sử dụng câu lệnh RAISERROR, ta còn có thể dùng PRINT để hiển thịthông báo lỗi cho người sử dụng Tuy nhiên, những lời nhắc này chỉ là tạm thời và chỉhiển thị cho người sử dụng Chúng ta cần sử dụng câu lệnh RAISERROR để ghi lạinhững lỗi này và gán cho nó mức severity.
Cú pháp: RAISERROR ({msg_id | msg_str}{,severity, state}
Counter has fallen below 3
Câu hỏi, bài tập
1.Ký hiệu nào theo sau đứng trước tên biến trong câu lệnh EXECUTE?
A &
B #
C ?
Trang 15A SP được biên dịch lại ở ngay lần tiếp theo nó thực hiện
B SP được biên dịch lại ở tất cả các lần nó thực hiện
C: SP được biên dịch lại khi SQL Server khởi động
C: SP được biên dịch lại khi có chỉ số được tạo trên các bảng mà nó tham chiếu tới
5 Chúng ta có thể sửa chữa được những thủ tục hệ thống (System storedprocedures)
Yêu cầu kiểm tra đánh giá kết quả học tập
- Định nghĩa được thủ tục lưu trữ với các kiểu tham số.
- Sửa đổi được thủ tục đã định nghĩa.
- Xóa được các thủ tục.
Trang 16BÀI 2 : TRIGGER
Định nghĩa được Trigger
Áp dụng được mệnh đề IF UPDATE trong Trigger để đảm bảo tính toàn vẹn dữliệu cho các thao tác INSERT, UPDATE, DELETE
Thực hiện đựợc các biện pháp an toàn cho máy tính
Nội dung
1 Giới thiệu Trigger
Trigger là một loại stored procedure đặc biệt, và nó sẽ được tự động thực thi khi
có sự kiện tương ứng tác động Có 3 loại triggers: DML triggers, DDL triggers, vàlogon triggers
DDL triggers là các trigger sẽ được tự động thực thi khi xảy ra các sự kiện liênquan đến định nghĩa dữ liệu trên phạm vi server hoặc database DDL là viết tắt
của data definition language.
Logon triggers là trigger được kích hoạt tương ứng với sự kiện LOGON Sựkiện này được phát sinh khi user session được thiết lập đối với một instance củaSQL Server
DML triggers là các triggers sẽ được tự động thực thi khi các có sự kiện thaotác dữ liệu xảy tương ứng liên quan thao tác dữ liệu trên table hoặc view mà nó gắn
kết DML là viết tắt của data manipulation language Các sự kiện DML bao gồm
các lệnh INSERT, UPDATE, hoặc DELETE thao tác trên các đối tượng table hoặcview
DML trigger giống như một stored procedure, nghĩa là trigger cũng sẽ chứa tậphợp các câu lệnh T-SQL Tuy nhiên, ta không thể phát lời gọi trực tiếp đối vớitrigger Các câu lệnh bên trong trigger sẽ tự động thực thi khi có thao tác dữ liệutương ứng xảy ra trên đối tượng Table mà nó gắn Các thao tác dữ liệu bao gồmcác lệnh INSERT, UPDATE, hoặc DELETE
Các lệnh INSERT, UPDATE, và DELETE được hiểu như là các lệnh kích hoạttrigger và nó cũng là lệnh khởi đầu cho một giao tác (transaction), các lệnh trongtrigger cũng là một phần của giao tác này
Trang 17Có hai loại DML trigger: AFTER triggers và INSTEAD OF triggers
2 Tạo Insert trigger
Insert trigger đảm bảo dữ liệu nhập vào bảng được đúng đắn
Xem xét ví dụ: Tạo INSERT trigger để đảm bảo không có vé nào được đặt vàomột ngày trong quá khứ
Các bước thực hiện:
Bước 1 Mở QA, chọn cơ sở dữ liệu FI
Bước 2 Thực hiện đoạn lệnh sau trong QA
CREATE TRIGGER insert_trigg
3 Tạo Delete Trigger
DELETE trigger ngăn cản việc xoá đi những dữ liệu quan trọng trong bảng
Xem xét ví dụ sau: Tạo trigger để tránh xoá 2 bản ghi trong bảng Passenger đồngthời
Các bước thực hiện:
Bước 1 Trong QA thực hiện như sau:
CREATE TRIGGER delete_trigg
Trang 18Bước 2 Thực hiện câu lệnh xoá nhiều hơn 2 bản ghi từ bảng Passenger, giả sử Kết quả:
Hình 2.1:Kết quả thực hiện Delete trigger
4 Tạo Update trigger
4.1 Tạo Table Level Update Trigger
Trigger UPDATE được thực hiện bất cứ khi nào dữ liệu trong bảng được cập nhật.Xem xét ví dụ: Tạo UPDATE trigger đảm bảo rằng cột No_of_seats trong bảngReservation không được cập nhật giá trị lớn hơn 5 và journey_date không nhỏ hơnngày hiện tại
Các bước tiến hành
Bước 1 Thực hiện như sau trong QA
CREATE TRIGGER CheckingUpdate
ON Reservation
FOR UPDATE
AS
IF((Select no_of_seats From inserted)>5)
OR ((Select journey_date From Inserted)<getdate()) BEGIN
Trang 19Hình 2.2:Kết quả thực hiện Table level Update trigger
4.2 Tạo Column Level Update Trigger
Loại Trigger được thực hiện khi dữ liệu trong cột nào đó được cập nhật
Bước 1 Thực hiện như sau trong QA:
CREATE TRIGGER Col_Update_trig
Bước 2 Bây giờ, chúng ta sẽ thử cập nhật cột Fare
Hình 2.3:Kết quả thực hiện Column Level Update trigger
5 Tạo Trigger có lựa chọn Encryption
Encryption (mã hoá) là phương pháp giữ bí mật cho Trigger Nội dung của Triggersau khi được mã hoá sẽ không đọc được
Các bước thực hiện
Trang 20Bước 1 Thực hiện câu lệnh ALTER TRIGGER để sửa insert_trigg:
ALTER TRIGGER insert_trigg
Bước 2 Thực hiện câu lệnh sau:
Hình 2.4:Kết quả thực hiện Encryption trigger
6 Hiển thị danh sách các trigger trong DB
Sử dụng thủ tục hệ thông sp_helptrigger để hiển thị danh sách các trigger trong cơ
sở dữ liệu hiện tại
sp_helptrigger Flight_Details
Kết quả:
Hình 2.5:Hiển thị trigger trong DB
Trang 217 Sử dụng trigger để cài đặt Ràng buộc tham chiếu
Xem xét ví dụ sau: Tạo Trigger để kiểm tra dữ liệu nhập vào cột Meal Pref củabảng Passenger phải là dữ liệu đã tồn tại trong cột Meal codes của bảng Meal
Bước 1 Thực hiện như sau trong QA:
CREATE TRIGGER ins_trig
ON Passenger
FOR INSERT
AS
IF (Select [Meal Pref]FROM INSERTED)
NOT IN (Select meal_code FROM Meal)
BEGIN
Print 'Ban khong the insert gia tri nay'
ROLLBACK TRAN
END
Bước 2 Hãy thử kiểm tra hoạt động của Trigger trên
8 Cascade Delete sử dụng Nested trigger
Trong Nested trigger, một trigger có thể được thực hiện lồng trong trigger khác.Chúng ta có thể lồng trigger tối đa 32 mức Nested trigger cho phép cascade update vàcascade delete
Thực hiện câu lệnh để kích hoạt Nested trigger:
sp_configure ‘nested trigger’, 1
Ngược lại:
sp_configure ‘nested trigger’, 0
Tạo Cascade delete trigger để thực hiện công việc sau: Nếu xoá một chuyến baytrong bảng Flight, thì tất cả các thông tin liên quan trong bảng Flight_Details sẽ bị xoá.Bước 1.Thực hiện như sau trong QA:
CREATE TRIGGER Casc_del
Trang 22CREATE TRIGGER del_aircraftcode
ON Flight_details
FOR DELETE
AS
SELECT * FROM Flight
SELECT * FROM Flight_Details
Bước 3.Thực hiện câu lệnh sau:
DELETE FROM Flight
WHERE aircraft_code= ‘9W01’
9 Instead of trigger
Cách thức hoạt động:
- Bước 1: Câu lệnh UPDATE, INSERT, hoặc DELETE được thực thi
- Bước 2: Câu lệnh được thực thi không xảy ra
- Bước 3: Các câu lệnh của INSTEAD OF trigger được thực thi
Dựa trên cách thức hoạt động của nó, ta có thể thấy thực chất các câu lệnhinsert, update , delete tác động trên table có gắn instead of trigger sẽ chỉ mang tínhphát sinh sự kiện kích hoạt cho các lệnh bên trong trigger thực thi
Trang 23create trigger del_InsteadOf_tab1 on tab1
declare @a int,@b int
select @a=a,@b=b from inserted
insert tab1 values(@a+10,@b+5)
end
Chúng ta có thể thực hiện INSTEAD OF trigger trên bảng, nó thay thế cho câu lệnhINSERT, UPDATE, DELETE nguyên thuỷ
Bước 1.Thực hiện như sau bằng QA:
CREATE TRIGGER instead_trigg
Trang 24Bước 2.Thực hiện câu lệnh sau:
INSERT INTO Service Values(‘FA’, ‘First Aid’)
Kết quả:
Câu hỏi và bài tập
Thực hiện những yêu cầu sau bằng QA:
1 Tạo INSERT trigger có tên ins_chkclass trên bảng Reservation Trigger đảmbảo rằng dữ liệu được nhập vàp trường class code tồn tại trong bảngClass_master và số ghế được đặt không quá 2
2 Tạo Cascading UPDATE trigger có tên upd_mealcode trong bảng Meal Khimeal code trong bảng Meal được cập nhật thì những dữ liệu liên quan trongbảng Airline_meal cũng được cập nhật tương ứng
3 Hiển thị mã lệnh (code) của trigger ins_chkclass trên bảng Reservation
4 Sửa trigger upd_mealcode để người sử dụng không nhìn thấy mã lệnh của nó
5 Tạo View có tên all_day chứa thông tin chi tiết sau: day code, day name, vàaircraft code trong bảng Day_master và Flight_days Tạo DELETE trigger tên
là del_day để xoá dữ liệu trong View Kiểm tra lại sự thực hiện của trigger
Yêu cầu kiểm tra đánh giá kết quả học tập
Phát biểu được khái niệm bảng dữ liệu;
Tạo lập được cấu trúc bảng;
Thiết lập được các trường, thuộc tính;
Thao tác được với dữ liệu trong Datasheet view
Trang 25Mục tiêu
Khai báo và sử dụng được hàm với các kiểu dữ liệu cơ sở
Khai báo và sử dụng được hàm có kiểu dữ liệu trả về là bảng
Thực hiện đựợc các biện pháp an toàn cho máy tính
Nội dung
1 Khái niệm
Trong SQL có rất nhiều các hàm được định nghĩa sẵn (Được chia theo nhóm Trong 1 Database bạn chọn Programmability/Functions/System Functions) như cáchàm về chuỗi (String Functions), các hàm về ngày tháng (Date and Time Functions),Các hàm toán học (Mathematical Function),
-Ngoài những hàm do hệ quản trị cơ sở dữ liệu cung cấp sẵn, bạn có thể tự xây dựngcác hàm nhằm phục vụ cho mục đích riêng của mình - Các hàm do người dùng địnhnghĩa
Các hàm do người dùng định nghĩa thường có 2 loại: Loại 1 là Hàm với giá trị trả
về là "dữ liệu kiểu bảng" - Table-valued Functions; Loại 2 là Hàm với giá trị trả về làmột giá trị - Scalar-valued Functions và các hàm này cũng sẽ được Hệ quản trị phânthành 2 nhóm
Cú pháp của hàm như sau:
CREATE FUNCTION Ten_Ham ( [Danh_Sach_Cac_Tham_So] )
Trang 26- Cac_Cau_Lenh_Cua_Ham: Tập hợp các câu lệnh sử dụng trong nội dung hàm đểthực hiện các yêu cầu của hàm.
Ví dụ 1: Hàm không có Danh_Sach_Cac_Tham_So - trả về giá trị là năm hiện hành(Theo giờ hệ thống trên máy Database server):
CREATE FUNCTION dbo.fuGetCurrYear ()
Ví dụ 2: Trong ví dụ này sẽ có 2 tham số trong Danh_Sach_Cac_Tham_So Hàm sẽ trả
về số ngày của tháng, năm do người dùng truyền vào
CREATE FUNCTION dbo.fuDaysInMonth (
Trang 27Ví dụ 3: Xác định thứ trong tuần của một giá trị kiểu ngày
CREATE FUNCTION fuThu
DECLARE @KetQua NVARCHAR(10)
SELECT @KetQua=CASE DATEPART(DW,@ngay)
WHEN 1 THEN N'Chủ nhật'
WHEN 2 THEN N'Thứ hai'
WHEN 3 THEN N'Thứ ba'
WHEN 4 THEN N'Thứ tư'
WHEN 5 THEN N'Thứ năm'
WHEN 6 THEN N'Thứ sáu'
ELSE N'Thứ bảy'
END
RETURN (@KetQua) /* Trị trả về của hàm */
END
Một hàm khi đã được định nghĩa có thể được sử dụng như các hàm do hệ quản trị cơ
sở dữ liệu cung cấp (thông thường trước tên hàm ta phải chỉ định thêm tên của người
sở hữu hàm bằng dbo.) như ví dụ dưới đây:
SELECT e.FirstName, e.LastName,
dbo.fuThu(e.BirthDate) AS ThuOfBirth
FROM Employees e
2 Hàm với giá trị trả về là "dữ liệu kiểu bảng"
Nếu đã biết về SQL chắc hẳn bạn đã biết cách tạo View từ các bảng trong CSDL,Nhưng với View bạn không thể truyền các tham số được, điều này phần nào đó làmgiảm tính linh hoạt trong việc sử dụng View Vậy nên khi bạn cần sử dụng dữ liệudạng View mà có các tham số thì việc sử dụng hàm là một giải pháp hợp lý nhất
Ví dụ 4:
Giả sử tạo 1 View như sau:
CREATE VIEW vProducts
Trang 28Categories INNER JOIN
Products ON Categories.CategoryID = Products.CategoryIDWHERE Categories.CategoryID=1
Trong ví dụ tạo ra 1 View vProducts có Categories.CategoryID=1 và truy vấn cáctrường của bảng Products ứng với CategoryID=1
Ta chỉ cần câu lệnh Select * from vProducts là bạn đã có kết quả như ý Nhưng vớinhững CategoryID khác thì View vProducts không làm được Vì vậy, ta sử dụng hàmtheo ví dụ 5
Ví dụ 5: Tạo một hàm trả về dữ liệu dạng bảng tùy theo giá trị của biến categoryID truyền vào:
CREATE FUNCTION fuGetProducts
Categories INNER JOIN
Products ON Categories.CategoryID = Products.CategoryIDWHERE Categories.CategoryID=@CategoryID)
Tiến hành chạy thử hàm trên (Chú ý là khi hàm trả về dạng bảng ta cũng coi đónhư một table hoặc một View và người dùng có thể truy vấn theo một hay nhiềutrường của hàm) như sau:
Sẽ tra về dữ liệu chính là Select * from vProducts ở trên
Nếu muốn lấy Theo CategoryID=2 bạn dùng câu lệnh
Select * from dbo.fuGetProducts(2)
Yêu cầu kiểm tra đánh giá kết quả
Khai báo và sử dụng được hàm với các kiểu dữ liệu cơ sở
Khai báo và sử dụng được hàm có kiểu dữ liệu trả về là bảng
Trang 29BÀI 4BẢO MẬT TRONG SQL SERVER
Sử dụng được các lệnh tạo user
Sử dụng được các lệnh cấp phát, thu hồi và từ chối quyền đối với người sửdụng
Thực hiện đựợc các biện pháp an toàn cho máy tính
Nội dung
1 Các khái niệm
Bảo mật là một trong những yếu tố đóng vai trò quan trọng đối với sự sống còncủa CSDL Hầu hết các hệ quản trị CSDL thương mại hiện nay đều cung cấp khảnăng bảo mật CSDL với những chức năng như:
• Cấp phát quyền truy cập CSDL cho người dùng và các nhóm người dùng, pháthiện và ngăn chặn những thao tác trái phép của người sử dụng trên CSDL
• Cấp phát quyền sử dụng các câu lệnh, các đối tượng CSDL đối với ngườidùng
• Thu hồi (huỷ bỏ) quyền của người dùng
Bảo mật dữ liệu trong SQL được thực hiện dựa trên ba khái niệm chính sau đây:
• Người dùng CSDL (Database user): Là đối tượng sử dụng CSDL, thực thi cácthao tác trên CSDL như tạo bảng, truy xuất dữ liệu, Mỗi một người dùng trongCSDL được xác định thông qua tên người dùng (User ID) Một tập nhiều ngườidùng có thể được tổ chức trong một nhóm và được gọi là nhóm người dùng (UserGroup) Chính sách bảo mật CSDL có thể được áp dụng cho mỗi người dùng hoặccho các nhóm người dùng
• Các đối tượng CSDL (Database objects): Tập hợp các đối tượng, các cấu trúclưu trữ được sử dụng trong CSDL như bảng, khung nhìn, thủ tục, hàm được gọi làcác đối tượng CSDL Đây là những đối tượng cần được bảo vệ trong chính sáchbảo mật của CSDL
• Đặc quyền (Privileges): Là tập những thao tác được cấp phát cho người dùngtrên các đối tượng CSDL Chằng hạn một người dùng có thể truy xuất dữ liệu trênmột bảng bằng câu lệnh SELECT nhưng có thể không thể thực hiện các câu lệnhINSERT, UPDATE hay DELETE trên bảng đó
SQL cung cấp hai câu lệnh cho phép chúng ta thiết lập các chính sách bảo mật