1: Stored-Procedure:
- Là các chương trình trong SQL Server.
- Đặc tính:
- Cho phép truyền các tham số đầu vào và chấp nhận trả về các giá trị chứa trong các tham số hoặc trả về các trạng thái giá trị để gọi những thủ tục hoặc thực hiện các xử lý theo lô để biết việc thực hiện thành công hay thất bại, nếu thất bại thì có thể đưa ra nguyên nhân thấp bại.
- Bao gồm cả các lệnh gọi các thủ tục thực thi khác, chứa các lệnh SQL của chương trình để thực hiện các xử lý trong database.
- Ta có thể dùng Transact–SQL EXCUTE để thực thi các stored procedure. Stored procedure khác với các hàm xử lý là giá trị trả về của chúng không chứa trong tên và chúng không được sử dụng trực tiếp trong biểu thức.
- So với các chương trình cục bộ, Stored procedure co ưu điểm hơn là:
- Động: Stored procedure cho phép điều chỉnh chương trình cho phù hợp: Chúng ta có chỉ tạo stored procedure một lần và lưu trữ trong database một lần, trong chương trình chúng ta có thể gọi nó với số lần bất kỳ. Stored procedure có thể được chỉ rõ do một người nào đó tạo ra và sự thay đổi của chúng hoàn toàn độc lập với source code của chương trình.
- Nhanh hơn: Stored procedure 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 và 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, nghĩa là trong những lần thực hiện sau chúng không cần phải phân tích cú pháp và tối ưu lại, mà chúng 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 Transact – SQL lớn, lặp.
- Giảm thiểu bandwidth: Với một sử lý sử dụng Transact-SQL có tới hàng trăm câu lệnh đơn được đồng thời gửi đi dẫn tới tình trạng ngốn bandwidth hoặc có thể là quá tải. Stored procedure cải thiện được vấn đề này bằng cách gửi theo trình tự xử lý. Đồng thời stored procedure còn có thể phân tích cú pháp và tối ưu hóa cậu lệnh trong lần thực thi đầu, giúp cải thiện câu lệnh tốt hơn.
- Bảo mật: Phân cấp quyền sử dụng cho các user, cấp quyền, 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.
- Định nghĩa về một stored procedure:
- Tên của stored procedure
- Các tham số
- Thân của stored procedure: bao gồm các lệnh của Transact-SQL dùng để thực thi procedure.
- Cú pháp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">PROCEDURE</span> procedure_name <span class="hljs-comment">-- The variable parameter in/out</span> {@parameter data_type <span class="hljs-keyword">input</span>/<span class="hljs-keyword">output</span> } <span class="hljs-keyword">AS</span> <span class="hljs-keyword">Begin</span> [<span class="hljs-keyword">Declare</span> <span class="hljs-keyword">variables</span> <span class="hljs-keyword">for</span> processing] {Transact-<span class="hljs-keyword">SQL</span> statements} <span class="hljs-keyword">End</span> - Lưu ý: Trong <span class="hljs-keyword">SQL</span> <span class="hljs-keyword">Server</span>, có thể ghi tắt một số từ khóa mà tên có chiều dài hơn <span class="hljs-number">4</span> ký tự. >Ví dụ: có thể thay thế <span class="hljs-keyword">Create</span> <span class="hljs-keyword">Procedure</span> bằng <span class="hljs-keyword">Create</span> Proc. - Khai báo biến và gán giá trị cho biến, Ghi chú <span class="hljs-string">``</span><span class="hljs-string">`SQL -- Declare variables DECLARE @parameter_name data_type -- Assigning values to variables SET @parameter_name = value SELECT @parameter_name = value -- Show notice print N'message' -- Notes - Biên dịch và gọi thực thi một stored-procedure - Biên dịch : Chọn toàn bộ mã lệnh Tạo stored-procedure => Nhấn F5 - Gọi thực thi một store-Procedure đã được biên dịch bằng lệnh exec: `</span><span class="hljs-string">``</span><span class="hljs-keyword">SQL</span> <span class="hljs-keyword">EXECUTE</span> procedure_name <span class="hljs-comment">--Stored-proc nonparametric</span> EXEC procedure_name Para1_value, Para2_value, … <span class="hljs-comment">--Stored-proc with parameters</span> - Lệnh cập nhật <span class="hljs-keyword">Procedure</span> <span class="hljs-string">``</span><span class="hljs-string">`sql ALTER PROCEDURE procedure_name [ {@parameter data_type } ] AS Begin [Declare variables for processing] {Transact-SQL statements} End - Lệnh xóa Procedure `</span><span class="hljs-string">``</span><span class="hljs-keyword">sql</span> <span class="hljs-keyword">DROP</span> <span class="hljs-keyword">PROCEDURE</span> procedure_name **<span class="hljs-number">2</span>: <span class="hljs-keyword">Trigger</span>:** - Mỗi khi có sự thay đổi về dữ liệu ở một bảng dữ liệu cụ thể nào đó hoặc các thao tác, xử lý sử dụng các lệnh như: <span class="hljs-keyword">insert</span>, <span class="hljs-keyword">update</span>, <span class="hljs-keyword">delete</span> làm thay đổi <span class="hljs-keyword">Trigger</span> sẽ được gọi. Khá giống với <span class="hljs-keyword">store</span> <span class="hljs-keyword">procedure</span> nhưng đặc biện hơn. <span class="hljs-keyword">Trigger</span> có thể chứ các lệnh truy vấn từ các bảng khác hay những lệnh <span class="hljs-keyword">SQL</span> phức tạp hơn <span class="hljs-keyword">store</span> <span class="hljs-keyword">procedure</span> rất nhiều. - Ưu điểm, thuận lợi khi sử dụng <span class="hljs-keyword">trigger</span>: - **Tự động**: <span class="hljs-keyword">Trigger</span> sẽ tự động được gọi: <span class="hljs-keyword">Trigger</span> sẽ ngay tức được kích hoạt mỗi khi có sự thay đổi dữ liệu trên bảng dữ liệu. - <span class="hljs-keyword">Trigger</span> có thể thực hiện <span class="hljs-keyword">cascade</span> khi việc thi hành có ảnh hưởng đến những bảng liên quan. - <span class="hljs-keyword">Trigger</span> có những hiệu lực ít bị hạn chế hơn so với ràng buộc giá trị nghĩa là có thể ràng buộc tham chiếu đến những cột của những bảng dữ liệu khác. - Khi <span class="hljs-keyword">trigger</span> được kích hoạt bởi <span class="hljs-number">1</span> lệnh Transact-<span class="hljs-keyword">SQL</span> <span class="hljs-keyword">insert</span> để thêm một bộ mới vào bảng ABC thì bộ mới này được lưu tạm thời vào một bảng tạm có tên là inserted có cùng cấu trúc với bảng ABC. Khi kết thúc <span class="hljs-keyword">trigger</span> này thì bộ dữ liệu mới thật sự lưu xuống CSDL. - **An <span class="hljs-keyword">to</span>àn**: Các bảng, các bộ dữ liệu bị xóa sẽ được chuyển tạm vào các bảng tạm deleted tương tự như đối với lệnh delete. - Cú pháp - Lệnh tạo <span class="hljs-keyword">Trigger</span> <span class="hljs-string">``</span><span class="hljs-string">`SQL Create Trigger trigger_name on table_name For [insert,update,delete] As Begin {Declare variables for processing} {Transact-SQL statements} End - Lệnh xóa Trigger `</span><span class="hljs-string">``</span><span class="hljs-keyword">SQL</span> <span class="hljs-keyword">Drop</span> <span class="hljs-keyword">Trigger</span> trigger_Name |