10
Bài Báo Cáo số 3 _ CLB Tin học UNETI năm thứ 2 Sinh viên : VŨ ĐÌNH VINH Tìm hiểu Store Procedure trong MS SQL Server Tham khảo : - http://msdn.microsoft.com - http://congdongcviet.com 1.Định nghĩa Một Store Procedure là một nhóm câu lệnh T-SQL có nhiệm vụ biên dịch một công việc duy nhất, và nó có thể được dùng lại. Store Procedure được lưu trữ trong Cơ sở dữ liệu Store Procedure trả lại dữ liệu có thể là các thông số đầu ra, mà có thể trả lại hoặc dữ liệu (chẳng hạn như một số nguyên hoặc giá trị ký tự) hoặc một biến con trỏ, một kết quả trả lại cho mỗi câu lệnh SELECT trong Store Procedure hoặc các Store Procedure được gọi lại bởi các Store Procsdure, một con trỏ global có thể tham chiếu bên ngoài Store Procedure 2.Tác dụng

Tìm hiểu Store Procedure

  • Upload
    vinh-vu

  • View
    171

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Tìm hiểu Store Procedure

Bài Báo Cáo số 3 _ CLB Tin học UNETI năm thứ 2

Sinh viên : VŨ ĐÌNH VINH

Tìm hiểu Store Procedure trong MS SQL Server

Tham khảo :

- http://msdn.microsoft.com - http://congdongcviet.com

1.Định nghĩa

Một Store Procedure là một nhóm câu lệnh T-SQL có nhiệm vụ biên dịch một công việc duy nhất, và nó có thể được dùng lại. Store Procedure được lưu trữ trong Cơ sở dữ liệu

Store Procedure trả lại dữ liệu có thể là các thông số đầu ra, mà có thể trả lại hoặc dữ liệu (chẳng hạn như một số nguyên hoặc giá trị ký tự) hoặc một biến con trỏ, một kết quả trả lại cho mỗi câu lệnh SELECT trong Store Procedure hoặc các Store Procedure được gọi lại bởi các Store Procsdure, một con trỏ global có thể tham chiếu bên ngoài Store Procedure

2.Tác dụng

Store Procedure hỗ trợ trong việc đạt được một công việc nhất quán trên các ứng dụng. Các câu lệnh SQL cần thiết để thực hiện một nhiệm vụ thường được thực hiện có thể được thiết kế, mã hóa, và thử nghiệm một lần trong một Store Procedure. Mỗi ứng dụng cần để thực hiện nhiệm vụ đó sau đó có thể chỉ cần gọi lại các Store Procedure

Thủ tục lưu trữ cũng có thể cải thiện hiệu suất. Nhiều nhiệm vụ được thực hiện như một loạt các câu lệnh SQL. Câu lệnh IF trong ví dụ này cho thấy nhúng điều kiện logic trong một thủ tục để lấy một kết quả thiết lập cho ứng dụng:

Page 2: Tìm hiểu Store Procedure

CREATE PROCEDURE timkiemsv_ten(

@ten nvarchar(50))ASIF (@ten is not null ) BEGIN

SELECT * FROM HOCVIEN where TEN =@ten ENDELSE BEGIN

SELECT * FROM HOCVIEN END

3. Nguyên tắc làm việc

Stored Procedure được thực thi sau khi ta gọi câu lệnh CALL procedure (tênStored Procedure) hoặc là EXECUTE procedure (tên Stored Procedure). Các câu lệnh trong Store Procedure được thực thi và kết quả trả về sau khi các Stored Procedure được thực thi thường là một tập hợp và tập các kết quả này có thể sẽ được xử lý bởi một Stored Procedure khác hoặc các chương trình ứng dụng hoặc là có thể kết hợp với các tập kết quả khác.

Store Procedure cũng có thể bảo vệ các chi tiết của các bảng trong cơ sở dữ liệu. Nếu một tập hợp các Store Procedure hỗ trợ tất cả các chức năng người dùng cần phải thực hiện, người dùng không bao giờ cần phải truy cập các bảng trực tiếp, họ chỉ có thể thực hiện các Store Procedure mà họ đã quen thuộc.

Bạn có thể quản lý một hệ thống SQL Server bằng cách sử dụng Transact-SQL (như CREATE TABLE) hoặc hệ thống Store Procedure, và không bao giờ cần phải trực tiếp cập nhật các bảng hệ thống.

4.Cấu trúc thành phần của 1 Procedure

CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- Add the parameters for the stored procedure here<@Param1, sysname, @p1> <Datatype_For_Param1, , int> =

<Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> =

<Default_Value_For_Param2, , 0>ASBEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

Page 3: Tìm hiểu Store Procedure

-- interfering with SELECT statements.SET NOCOUNT ON;

-- Insert statements for procedure hereSELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>

END

- sysname: tên của user sở hữu Stored Procedure. Nó phải là tên của user hiện tại. Hoặc là tên một user đang sử dụng trong hệ thống các user.

- Procedure_name: là tên của Stored Procedure. Procedure_name phải tuân theo quy tắc khai báo định danh của cơ sở dữ liệu.

Các local procedure tạm thời thường phải bắt đầu bằng một dấu #, còn các global procedure tạm thời thường có tên bắt đầu bởi hai dấu #.

Và tên các Stored Procedure kể cả các dấu # có độ dài tối đa là 128 kí tự.

@parameter: là một biến trong Stored Procedure. Trong một Stored Procedure có thể có từ 2 đến 100 biến và các biến bắt đầu bằng ký tự @.

Mỗi biến có phạm vi hoạt động trong Stored Procedure chứa nó vì thế Tên biến có thể giống nhau giữa các biến trong các Stored Procedure khác nhau.

Mặc định mỗi biến phạm vi hoạt động không đổi có nghĩa là nó không thể sử dụng được trong các bảng,các cột hoặc trong các đối tượng cơ sở dữ liệu khác ngoài Stored Procedure.

- Datatype_For_Param1: Là kiểu dữ liệu của biến. Tất cả các kiểu dữ liệu kể trừ các kiểu dữ liệu sử dụng trong bảng đều có thể trở thành kiểu dữ liệu trong Stored Procedure. Tuy nhiên, kiểu con trỏ chỉ được sử dụng trong các biến đầu ra của Stored Procedure

5.Các loại Store Procedure

- System Store Procedure : Nhiều chức năng quản trị trong SQL Server được thực thi thông qua một loại thủ tục đặc biệt là System Store Procedure, thường có đầu tiếp ngữ là sp_

- User – defined Store Procedure: Là những module hoặc là những chức năng thường dùng được khai báo dướidạng một hàm để rút ngắn code chương trình.

Page 4: Tìm hiểu Store Procedure

Một Stored Procedure có thể có biến đầu vào và trả ra một kết quả dạng bảng, kết quả thuộc một kiểu dữ liệu nào đó hoặc là một thông điệp đến các client

- Extended Store Procedure: Cho phép chúng ta tạo các Stored Procedure bằng một ngôn ngữ khác ví dụ như C.Sau đó biên dịch Stored Procedure này ra file DLL và SQL Server có thể load và chạy nó

6. Ví dụ

Page 5: Tìm hiểu Store Procedure

Kết quả trả về khi biên dịch Store Procedure:

Page 6: Tìm hiểu Store Procedure

Kết nối CSDL trong C# sử dụng Store Procedure:

7. Đánh giá

Ưu điểm :

- Performance : Khi thực thi một câu lệnh SQL thì SQL Server phải kiểm tra permission xem user gởi câu lệnh đó có được phép thực hiện câ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 stored procedure vì người gởi chỉ gởi một câu lệnh đơn và SQL Server chỉ kiểm tra một lần sau đó tạo ra một execute plan và thực thi. Nếu stored procedure được gọi nhiề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 save nên nó không cần kiểm lại khi thực thi.

- Programming Framework : 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

Page 7: Tìm hiểu Store Procedure

tách rời giữa business rules (tức là những logic thể hiện bên trong stored procedure) và database. 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ụng dùng stored procedure này có thể sẽ không cần phải thay đổi mà vẫn tương thích với business rule mới. Cũng giống như các ngôn ngữ lập trình khác stored procedure cho phép ta đưa vào các input parameters (tham số) và trả về các output parameters đồng thời nó cũng có khả năng gọi các stored procedure khác.

- Security : Giả sử chúng ta muốn giới hạn việc truy xuất dữ liệu trực tiếp của một user nào đó vào một số tables, ta có thể viết một stored procedure để truy xuất dữ liệu và chỉ cho phép user đó được sử dụng stored procedure đã viết sẵn mà thôi chứ không thể "đụng" đến các tables đó một cách trực tiếp. Ngoài ra stored procedure có thể được encrypt (mã hóa) để tăng cường tính bảo mật.

Nhược điểm :

-Store Procedure làm cho hệ thống server nặng hơn, vì đơn thuần ta có thể đẩy các việc xử lý phức tạp của dữ liệu ở database cho server thay vì chỉ việc truyền và nhận dữ liệu. Và việc tính toán không phải là thế mạnh của database

- Việc viết và bảo trì (maintain) stored procedure thường yêu cầu 1 loạt các kỹ năng chuyên biệt nhiều khi không phải là kỹ năng của lập trình viên