Tại sao nên sử dụng Stored Procedure?

Stored Procedure là một tập hợp các câu lệnh SQL dùng để thực thi một nhiệm vụ nhất định. Nó có thể xem như một hàm trong các ngôn ngữ lập trình.

Stored procedure là một khái niệm khá phổ biến và được hầu hết các hệ quản trị cơ sở dữ liệu (DBMS) hỗ trợ, tuy nhiên không phải tất cả đều hỗ trợ Stored Procedure.

Những lợi ích khi sử dụng Stored procedure

Một stored procedure cung cấp một lớp bảo mật quan trọng giữa user và database. Những người dùng cuối không thể thực thi được một số tác vụ quan trọng trong database, bằng cách cung cấp các stored procedure, người dùng cuối có thể thoải moái sử dụng để thực thi các tác vụ này mà không cần quan tâm bên dưới đang làm gì. 

Stored Procedure được biên dịch và lưu vào bộ nhớ khi khởi tạo. Điều đó có nghĩa rằng nó sẽ thực thi nhanh hơn so với việc gửi từng đoạn lệnh SQL tới SQL Server. Vì nếu bạn gửi từng đoạn lệnh nhiều lần thì SQL Server cũng sẽ phải biên dịch lại nhiều lần, rất mất thời gian so với việc biên dịch sẵn.

Chúng ta cũng có thể sử dụng lại các stored procedure trong ứng dụng, khi mà chúng ta chỉ cần viết một lần, và các mã lệnh có thể gọi đến nó bất kỳ lúc nào.

Stored procedure trong SQL Server

Để thao tác với stored procedure trong SQL Server, trước tiên mình sẽ tạo một database gồm 1 bảng CUSTOMERS như sau

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

Tạo Stored procedure

Để tạo một stored procedure trong SQL Server chúng ta có thể theo dõi cú pháp sau

Create procedure  
As 
Begin 
 
END;

Ví dụ tạo một stored procedure lấy danh sách tất cả dòng dữ liệu trong bảng CUSTOMERS.

CREATE PROCEDURE SelectCustomerstabledata 
AS 
BEGIN
     SELECT * 
     FROM Testdb.Customers 
END;

Thực thi store procedure trong sql server

Sau khi khởi tạo thành công stored procedure với tham số output, chúng ta có thể thực thi chúng như sau:

Mình viết 1 Class có chức năng Insert, Update, Select, Delete cho bất cứ một tabel nào, chỉ cần truyền tham số và tên bảng là nó tự làm việc, do đó việc lập trình rất đơn giản.

Tuy nhiên có người nói với mình rằng, cách này chỉ tiện cho lập trình thôi, chứ việc xử lý như vậy chậm và không hiệu quả bằng cách dùng Stored Procedure mặc dù phải viết Stored Procedure...

Ví dụ 1 database có 40 tables, phải viết 40 cái Insert + 40 update + 40 Select + ... thì mình thấy mất thời gian quá nên dùng cách dùng một lớp dùng chung cho toàn bộ.

Vậy theo bạn có nên dùng Stored Procedures hay dùng cách viết hàm dùng chung cho toàn bộ Tables ?


Còn tuỳ vào mục đích công việc cũng như quy mô của Database mà có nên sử dụng SP hay không, chẳng hạn nếu Database đó được thiết kế bằng Access thì ....hoàn toàn không cần thiết, SP rất mạnh mẽ trong SQL Server vì các functions, SP đã được biên dịch trước, khi run, hệ thống không cần biên dịch lại mà chúng ta chỉ cần truyền tham số đầu vào là được, vì vậy tốc độ thực thi của SP thường rất nhanh, vả lại nó phú hợp với việc lập trình theop từng Modules, mà không phụ thuộc vaò các modules khác. Tuy nhiên, cũng còn tuỳ mục đích sử dụng.


dùng Stored Procedure để cho chương trình tăng tốc độ lên vì khi chạy thì nó chạy trên server và chỉ chạy lần đầu, mấy lần sau ko cần phải đọc lại nữa mà cứ việc chạy, cho nên viết Stored Procedure cũng là cần thiết.


dùng Stored Procedure để cho chương trình tăng tốc độ lên vì khi chạy thì nó chạy trên server và chỉ chạy lần đầu, mấy lần sau ko cần phải đọc lại nữa mà cứ việc chạy, cho nên viết Stored Procedure cũng là cần thiết.

việc dùng sproc làm chương trình chạy nhanh hơn thì đúng, nhưng việc sproc chỉ chạy lần đầu ,mấy lần sau không đọc nữa mà cứ chạy thì walls chưa nghe nói :shifty:

to tuấn: xài class chung chạy chậm lắm, mất công làm sproc 1 tí, nhưng speed cần hơn


hehe, chính vì ưu điểm đó nên người ta mới dùng store, nhưng cũng được khuyến cáo là không phải cái nào cũng dùng store hết, chỉ cái nào thường xuyên dùng đến database thì nên dùng


hehe, chính vì ưu điểm đó nên người ta mới dùng store, nhưng cũng được khuyến cáo là không phải cái nào cũng dùng store hết, chỉ cái nào thường xuyên dùng đến database thì nên dùng

bạn chưa hiểu ý walls gòi, đưa ra docs nào muh nói sproc chỉ chạy lần đầu xem ? hay là bạn đoán vậy ?
chẳng lẽ mấy lần sau nó không cập nhật thay đổi của database muh cứ đưa ra thông tin cũ ?

sproc chạy tốt hơn query vì thứ nhất, không tốn nhiều bandwidth (do được create xong thì nằm trên server, lúc chạy cần pass params thôi), thứ 2, sproc được sqlcommand tối ưu sẵn (đối với m$ sql thui nha) - theo tài liệu của m$. thứ 3 là m$ sql cũng đã tối ưu sẵn sproc hơn query.


Hey, cảm ơn các bạn nhiều đã cho ý kiến, mình đã chuyển sang dùng SP rồi, quả thật nó rất tiện, thanks


có điều thế này....nếu bạn đang sống trong thế giới .NET thì dùng store Procedure phải cẩn thận vì tính bảo mật không cao nếu dùng môi trường mạng...vì thế mới phát sinh dataset trong .NET gọi là disconnected Environment


?? chưa hiểu ý bạn ?
sproc bảo mật không cao àh, điều này walls chưa biết, bạn có thể cho 1 vài cái link được kô ?
theo walls sproc bảo mật cao hơn query string bình thường, vd mấy cái sql injection, trong query thường thì có thể bị, chứ pass vào sproc thì ms sql ngăn ngay.

còn cái dataset liên quan gì ở đây ? vì query hay sproc đều có thể bỏ data vào nó. nếu nói sproc không an toàn thì walls nghĩ query càng không...

Ưu điểm của việc sử dụng Stored Procedures là gì?

Ưu điểm của Stored Procedure Làm giảm thời gian giao tiếp giữa ứng dụng với hệ quản trị cơ sở giữ liệu. thay vì gửi từng câu truy vấn thì nay sẽ chỉ gửi một Stored Procedure. module hóa ứng dụng: do Stored Procedure có thể lưu lại và sử dụng lại nhiều lần. điều này sẽ làm cho việc maintenance trở lên dễ dàng hơn.

Khi nào dùng stored procedure?

Sử dụng Stored Procedure khi?.
Thực hiện những phép toán phức tạp, lặp lại nhiều lần..
Project đòi hỏi nghiêm ngặt về tốc độ thực thi . ... .
Trong quá trình tạo Stored Procedure, SQL Server đã tối ưu hóa những dòng lệnh này, điều này giúp cho tốc độ thực thi cao hơn câu lệnh SQL thông thường rất nhiều..

Stored procedure trong SQL dùng để làm gì?

Stored procedure được lưu trữ dưới dạng các đối tượng được đặt tên trong máy chủ cơ sở dữ liệu SQL Server. Khi bạn gọi một stored procedure lần đầu tiên, SQL Server sẽ tạo một kế hoạch thực thi và lưu trữ nó trong bộ đệm.

Trigger thường được dùng làm gì?

Trigger dùng làm gì ? Trigger thường được sử dụng để kiểm tra ràng buộc (check constraints) trên nhiều quan hệ (nhiều bảng/table) hoặc trên nhiều dòng (nhiều record) của bảng.