Bài viết này mô tả sự khác biệt giữa thủ tục được lưu trữ và hàm do người dùng xác định trong SQL Server. Có một số điểm khác biệt giữa proc được lưu trữ và hàm và một trong những điểm khác biệt chính là, hàm phải trả về một giá trị trong khi ở trong thủ tục được lưu trữ, tùy chọn của nó. Phần còn lại của sự khác biệt được giải thích dưới đây.
Một thủ tục được lưu trữ là mã SQL được chuẩn bị mà bạn lưu để bạn có thể sử dụng lại mã này nhiều lần. Vì vậy, nếu bạn nghĩ về một truy vấn mà bạn viết đi viết lại, thay vì phải viết truy vấn đó mỗi lần, bạn sẽ lưu nó dưới dạng một thủ tục được lưu trữ và sau đó chỉ cần gọi thủ tục đã lưu trữ để thực thi mã SQL mà bạn đã lưu như một phần của . Stored procedure cũng là một cách để giảm gánh nặng cho app và thực thi truy vấn SQL phía server
Ngoài việc chạy đi chạy lại cùng một mã SQL, bạn cũng có khả năng truyền tham số cho một thủ tục được lưu trữ, do đó, tùy thuộc vào nhu cầu là gì, Thủ tục được lưu trữ có thể hoạt động tương ứng dựa trên các giá trị tham số đã được truyền
Thủ tục lưu trữ cũng có thể cải thiện hiệu suất. Nhiều tác vụ được triển khai dưới dạng một loạt các câu lệnh SQL. Logic có điều kiện được áp dụng cho kết quả của câu lệnh SQL đầu tiên xác định câu lệnh SQL tiếp theo nào được thực thi. Nếu các câu lệnh SQL và logic có điều kiện này được ghi vào một Thủ tục được lưu trữ, chúng sẽ trở thành một phần của một kế hoạch thực thi duy nhất trên máy chủ. Không cần trả lại kết quả cho máy khách để áp dụng logic điều kiện;
Lợi ích của thủ tục lưu trữ
- Thực thi được biên dịch sẵn - SQL Server biên dịch từng Thủ tục được lưu trữ một lần rồi sử dụng lại kế hoạch thực thi. Điều này dẫn đến tăng hiệu suất rất lớn khi Thủ tục được lưu trữ được gọi liên tục
- Giảm lưu lượng máy khách/máy chủ - Nếu băng thông mạng là vấn đề đáng lo ngại trong môi trường của bạn thì bạn sẽ rất vui khi biết rằng Thủ tục được lưu trữ có thể giảm các truy vấn SQL dài thành một dòng duy nhất được truyền qua dây
- Tái sử dụng hiệu quả mã và phần tóm tắt lập trình - Các thủ tục được lưu trữ có thể được sử dụng bởi nhiều người dùng và chương trình máy khách. Nếu bạn sử dụng chúng một cách có kế hoạch thì bạn sẽ thấy chu kỳ phát triển cần ít thời gian hơn
- Kiểm soát bảo mật nâng cao - Bạn có thể cấp cho người dùng quyền thực thi Quy trình được lưu trữ độc lập với các quyền của bảng cơ bản
Hàm do người dùng xác định
Giống như các hàm trong ngôn ngữ lập trình, Hàm do người dùng xác định trong SQL Server là các quy trình chấp nhận tham số, thực hiện một hành động chẳng hạn như phép tính phức tạp và trả về kết quả của hành động đó dưới dạng giá trị. Giá trị trả về có thể là một giá trị vô hướng đơn lẻ hoặc một tập kết quả
Các hàm trong ngôn ngữ lập trình là các chương trình con được sử dụng để đóng gói logic được thực hiện thường xuyên. Bất kỳ mã nào phải thực hiện logic được tích hợp trong một hàm đều có thể gọi hàm đó thay vì phải lặp lại tất cả logic của hàm
SQL Server hỗ trợ hai loại chức năng
- Các hàm tích hợp - Hoạt động như được định nghĩa trong Tham chiếu Transact-SQL và không thể sửa đổi. Các chức năng chỉ có thể được tham chiếu trong các câu lệnh Transact-SQL bằng cách sử dụng cú pháp được xác định trong Tham chiếu Transact-SQL
- Hàm do người dùng xác định - Cho phép bạn xác định các hàm Transact-SQL của riêng mình bằng cách sử dụng câu lệnh CREATE FUNCTION. Các hàm do người dùng xác định sử dụng 0 hoặc nhiều tham số đầu vào và trả về một giá trị duy nhất. Một số hàm do người dùng xác định trả về một giá trị dữ liệu vô hướng, chẳng hạn như giá trị int, char hoặc thập phân
Lợi ích của hàm do người dùng xác định
Họ cho phép lập trình mô-đun
Bạn có thể tạo chức năng một lần, lưu trữ nó trong cơ sở dữ liệu và gọi nó bất kỳ số lần nào trong chương trình của bạn. Các chức năng do người dùng xác định có thể được sửa đổi độc lập với mã nguồn chương trình
Chúng cho phép thực hiện nhanh hơn
Tương tự như Thủ tục được lưu trữ, Hàm do người dùng xác định Transact-SQL giảm chi phí biên dịch mã Transact-SQL bằng cách lưu trữ các gói và sử dụng lại chúng cho các lần thực thi lặp lại. Điều này có nghĩa là chức năng do người dùng xác định không cần phải phân tích lại và tối ưu hóa lại sau mỗi lần sử dụng dẫn đến thời gian thực thi nhanh hơn nhiều. Các hàm CLR mang lại lợi thế hiệu suất đáng kể so với các hàm Transact-SQL cho các tác vụ tính toán, thao tác chuỗi và logic nghiệp vụ. Các hàm Transact-SQL phù hợp hơn với logic chuyên sâu truy cập dữ liệu
Họ có thể giảm lưu lượng mạng
Một hoạt động lọc dữ liệu dựa trên một số ràng buộc phức tạp không thể biểu thị bằng một biểu thức vô hướng đơn lẻ có thể được biểu thị dưới dạng một hàm. Sau đó, hàm có thể được gọi trong mệnh đề WHERE để giảm số lượng hoặc hàng được gửi tới máy khách
Sự khác nhau giữa Stored Procedure và User Defined Function trong SQL Server
Hàm do người dùng xác địnhFStored ProcedureFunction phải trả về một giá trị. Thủ tục lưu trữ có thể hoặc không trả về giá trị. Sẽ chỉ cho phép các câu lệnh Chọn, nó sẽ không cho phép chúng tôi sử dụng các câu lệnh DML. Có thể có các câu lệnh chọn cũng như các câu lệnh DML như chèn, cập nhật, xóa, v.v. Nó sẽ chỉ cho phép các tham số đầu vào, không hỗ trợ các tham số đầu ra. Nó có thể có cả tham số đầu vào và đầu ra. Nó sẽ không cho phép chúng tôi sử dụng các khối thử bắt. Để xử lý ngoại lệ, chúng ta có thể sử dụng khối try catch. Giao dịch không được phép trong các chức năng. Có thể sử dụng các giao dịch trong Thủ tục được lưu trữ. Chúng tôi chỉ có thể sử dụng các biến bảng, nó sẽ không cho phép sử dụng các bảng tạm thời. Có thể sử dụng cả biến bảng cũng như bảng tạm thời trong đó. Thủ tục lưu trữ không thể được gọi từ một chức năng. Thủ tục lưu trữ có thể gọi chức năng. Các chức năng có thể được gọi từ một câu lệnh chọn. Các thủ tục không thể được gọi từ các câu lệnh Chọn/Ở đâu/Có, v.v. Câu lệnh Execute/Exec có thể được sử dụng để gọi/thực thi Stored Procedure. Một UDF có thể được sử dụng trong mệnh đề nối như một tập hợp kết quả. Các thủ tục không thể được sử dụng trong mệnh đề Tham giaTóm lược
Trong bài viết này, chúng ta tìm hiểu về sự khác biệt giữa thủ tục lưu sẵn và hàm do người dùng định nghĩa trong SQL Server.