Both stored procedures and functions are database objects which contain a set of SQL statements to complete a task. In many ways, both are different from each other. In this article, we’re going to discuss the differences between stored procedures and functions. Show
Stored ProceduresStored Procedures are pre-compiled objects which are compiled for the first time and its compiled format is saved, which executes (compiled code) whenever it is called. For more about a stored procedure, please refer to the article Different types of Stored Procedure. FunctionsA function is compiled and executed every time whenever it is called. A function must return a value and cannot modify the data received as parameters. For more about functions, please refer to the article Different types of Functions. Basic Differences between Stored Procedure and Function in SQL Server
Advance Differences between Stored Procedure and Function in SQL Server
SummaryIn this article, you learn the difference between Stored Procedure and Function. I hope after reading this article you will be able to understand BASIC as well as ADVANCE differences between Stored Procedure and Functions (UDF). Comments, criticism, and suggestions are always welcome. Set @Ma_lop = 8DH Set @Ma_lop = 8DH9 + Year(@Ngay_tuyen) Set @Si_so_lop = (SELECT count(*) FROM SV) ####### Mỗi từ khóa SET chỉ dùng gán cho một biến 9 Bi¿n trong sql server (tt) Gán giá trß cho bi¿n:Có thể gán giá trß cho biến bằng mệnh đề SELECTVí dụ 1:####### Select @Ma_lop = 8DH029, @Si_so = Ví dụ 2:####### Select @Si_so =SiSo From Lop Where Malop =8DH02 9 ####### Select @max= max(diemlan1), @min=min(diemlan1) ####### from DIEMTHI where mahocphan='sql' 10 Bi¿n trong sql server (tt) Gán giá trß cho bi¿n:Lưu ý:####### Khi gán giá trß cho biến thì giá trß phải cùng kiểu dữ ####### liệu với biến ####### Giá trß gán cho biến là kết quả câu truy vấn thì kết ####### quả cÿa câu truy vấn phải trả về đúng 1 giá trß. Ví dụ:####### Set @Ho_ten = (Select HoTen From sinhvien) lỗi: ####### <Subquery returned more than 1 value. This is not ####### permitted&= 11 Bi¿n trong sql server (tt) In k¿t ra màn hình:DECLARE @KQ INT SET @KQ= 100 PRINT N8Kết quả là: 8 PRINT @KQ PRINT N9Kết quả là 9 + Convert(NVARCHAR(10),@KQ) (Có thể dùng SELECT thay cho PRINT) 12 Toán tửCác loại toán tử Số hác: *, /, %, - , + So sánh: =, <>, >, >=, <, <= Nối chuỗi: + Logic: AND, OR, NOT13 Toán tử (tt)Ví dụ:BEGIN 14 Mßt số hàm sử dÿng trong SQLMAX, MIN, SUM, COUNT, AVG, ROUNDLEN, LEFT, RIGHT, SUBSTRING, UPPER,LOWERDAY, MONTH, YEARHàm GETDATE: Lấy ngày hiện hành####### Ví dụ: 15 Mßt số hàm sử dÿng trong SQL (tt)####### Hàm DATEPART(Đßnh dạng,9Tháng/Ngày/Năm9): ####### Lấy 1 phần (ngày, tháng, năm, ngày trong tuần, ####### ngày trong năm) cÿa ngày ####### Ví dụ: 16 SELECT DATEPART(yyyy,'02/10/1982') AS N'Năm', DATEPART(mm,'02/10/1982') AS N'Th·ng', DATEPART(dd,'02/10/1982') AS N'Ng‡y', DATEPART(DAYOFYEAR,'02/10/1982') AS N'Ngày trong năm', DATEPART(WEEKDAY,'02/10/1982') AS N'Ngày thứ' Mßt số hàm sử dÿng trong SQL (tt)####### Hàm DATEDIFF(Đßnh dạng, 8ngày bắt đầu9, 8ngày ####### kết thúc9): Lấy hiệu giữa hai mốc thời gian (ngày ####### kết thúc) và (ngày bắt đầu) ####### Ví dụ: 17 Select DATEDIFF (dd,'2018-10-20', '2018-10-25') as N'số ngày' C¿u trúc lßnhCấu trúc If & ElseCấu trúc WhilePhát biểu ContinuePhát biểu BreakPhát biểu ReturnCấu trúc CaseCấu trúc Try..18 C¿u trúc điÁu khiển IF&ELSEL°u ý:Trong Cấu trúc If.., nếu có từ hai lệnh trởlên thì phải đặt giữa hai từ khóa Begin và End.19 IF Biểu thāc{câu lệnh hoặc nhóm lệnh được thực thi}ELSE{câu lệnh hoặc nhóm lệnh được thực thi}C¿u trúc điÁu khiển20 Ví dÿ:C¿u trúc điÁu khiển21 CASE&WHEN D¿ng 1:CASE <Biểu thức điÁu kißn>WHEN <Giá trß 1> THEN <K¿t quÁ 1> WHEN <Giá trß 2> THEN <K¿t quÁ 2> & ELSE <K¿t quÁ khác> ENDCASE&WHEN22 Ví dÿ 1:CASE&WHEN (tt)Ví dụ 2:####### Nhan_vien(MaNV,HoTen,NgaySinh, Phai). Cho biết ####### những nhân viên đến tuổi về hưu biết rằng tuổi về ####### hưu cÿa nam là 60, nữ là 55) ####### Select * From Nhan_vien ####### Where datediff(yy,Ngaysinh,Getdate()) >= ####### CASE Phai ####### WHEN 8Nam9 THEN 60 ####### WHEN 8Nu9 THEN 55 ####### END 23 CASE&WHEN (tt)CASE####### WHEN <biểu thāc điều kiện 1 THEN <Kết quả 1> ####### WHEN <biểu thāc điều kiện 2 THEN <Kết quả 2> ####### & ####### WHEN <biểu thāc điều kiện n THEN <Kết quả n> ####### ELSE <Kết quả khác> END24 D¿ng 2:CASE&WHEN (tt) Ví dÿ: Liệt kê thông tin nhập hàng bao gồm: Sốphiếu nhập, Ngày nhập, tên vật tư, số lượng, nhậnxét. Trong đó: nếu số lượng nhập >=1000 thì ghi lànhập nhiều, từ 500 trở lên thì ghi là nhập đÿ, cáctrường hợp còn lại ghi nhập ít.25 C¿u trúc while26 WHILEWHILE Biểu thứcCâu lßnh hoặc nhóm lßnh đ°ợc thực thi Chú ý : Nếu trong các cấu trúc điều khiển làmột nhóm lệnh thì phải đặt nhóm lệnh đó trongcặp từ khóa BEGIN & ENDC¿u trúc while27 Ví dÿ 1:C¿u trúc while (tt) Ví dÿ 2:Cho SV(Masv:int, HoTen:nvarchar(30))Yêu cầu chèn vào bảng sinh viên một sinh viênmới sao cho mã sinh viên cÿa sinh viên chènvào đảm bảo tính liên tục từ thấp đến caoChẳng hạn ta có MaSV: 1,2,3,4,8,9,& Sinhviên mới sẽ có mã là 528 C¿u trúc while (tt) Ví dÿ 2:Cho SV(Masv: int, HoTen: nvarchar(30))&..Declare @count intSet @count = 1While exists (Select * From SV Where MaSV =@count)set @count = @count +Insert into SV(MaSV, HoTen)Values (@count, N8Lê Như Ngác9)29 C¿u trúc while (tt)BREAK: Thoát khỏi vòng lặp WHILERETURN: Chúng ta có thể dùng RETURNbất kỳ thời điểm nào để thoát khỏi thÿ tục.Các phát biểu sau RETURN sẽ khôngđược thực thi.CONTINOUS: Các câu lệnh thực thi sau từkhóa CONTINOUS trong WHILE điều đượcbỏ qua để chuyển qua vòng lặp mới.30 C¿u trúc Try..Cấu trúc Try.. trong SQL Server được dùngđể bắt lỗi tương tự như trong C# và C++.Một nhóm các lệnh được đặt trong khối Try, nếu cómột lỗi xuất hiện bên trong khối Try thì điều khiểnđược gởi đến một nhóm lệnh khác được đặt trongmột khối Catch.Chỉ có từ phiên bản SQL Server 2005.31 C¿u trúc Try.. (tt)Cấu trúc Try& Catch có cấu trúc như sau:####### BEGIN TRY ####### { <Các câu lệnh SQL>} ####### END TRY ####### BEGIN CATCH ####### { <Các câu lệnh SQL>} ####### END CATCH ####### [ ; ] 32 C¿u trúc Try..Một số thông tin về lỗi:####### ERROR_NUMBER(): Trả về mã số lỗi. ####### ERROR_SEVERITY(): Trả về māc độ cÿa lỗi. ####### ERROR_STATE(): Mã trạng thái cÿa lỗi. ####### ERROR_PROCEDURE(): Trả về tên cÿa thÿ tục ####### hay trigger xuất hiện lỗi. ####### ERROR_LINE(): Trả về số dòng bên trong thÿ tục ####### xuất hiện lỗi. ####### ERROR_MESSAGE(): Trả về dòng văn bản thông ####### báo lỗi một cách đầy đÿ. Các hàm này trả về Null nếu nó được gái bênngoài cÿa khối Catch. 33C¿u trúc Try.. (tt)Ví dụ: Điều khiển lỗi trong chia hai sốdeclare @thuong float, @sobichia float, @sochia float Select @sobichia = 3, @sochia = 0 begin try set @thuong=@sobichia/@sochia print @thuong end try begin catch SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; Print N'Số chia bằng không' end catch 34 C¿u trúc Try.. (tt)Ví dụ: Khi thực thi thÿ tục trên: phepchia 3 , 0ếtquả trình bày trong ngăn Results và ngănMessages như sau:35 Thā tÿc l°u trữ - (Stored Procedure)1. Giới thiệu2. Phân loại thÿ tục3. Tạo thÿ tục4. Lời gái thÿ tục5. Giá trß trả về cÿa tham số trong thÿ tục6. Phát biểu điều khiển7. Tham số với giá trß mặc đßnh8. Thÿ tục với tham số Table9. Sửa đổi thÿ tục10. Xoá thÿ tục36 Stored Procedure là gì?Là một nhóm các câu lệnh T-SQL đã được biêndßch từ trước (pre-compiled).Thực hiện một nhiệm vụ cụ thểMột Stored Procedure####### Có thể không chāa hoặc chāa nhiều tham số truyền ####### vào; ####### Có thể trả giá trß về thông qua tham số truyền cho ####### thÿ tục. 37 Stored Procedure là gì?Có 2 dạng Stored Procedure:####### System Stored Procedure ####### User-defined Stored Procedure Các System Stored Procedure có sẵn khi chúngta cài đặt SQL Server. Tất cả các SystemStored Procedure đều bắt đầu bằng tiền tố sp_38 T¿i sao dùng Stored procedure?Tăng tốc độ thực thiMô đun hóa, dễ dàng gái lạiDễ dàng nâng cấp, bảo mật.39 Phân lo¿iTrong SQL Server có 3 nhóm thÿ tục nội tại sau: Nhóm thứ nh¿t là do người dùng tạo ra.Gồm hai loại:####### Loại thÿ tục nội tại được người dùng tạo ra và lưu ####### vào CSDL. Chúng chāa các phát biểu T-SQL. ####### Loại thā hai được khai báo và tạo ra bằng ngôn ####### ngữ lập trình .NET. 40 Phân lo¿i (tt) Nhóm thứ hai là thÿ tục nội tại hệ thống thựchiện các chāc năng quản trß CSDL thườngdùng. Các thÿ tục này chāa trong CSDLResource.####### Danh sách các thÿ tục nội tại hệ thống hiển thß ####### trong ngăn System Stored Procedure ####### Thÿ tục nội tại trong CSDL Resource luôn có tên ####### với tiÁn tố là sp_. Do đó bạn không nên đặt tên ####### thÿ tục nội tại do mình tạo ra bằng tiền tố này. Nhóm thứ ba là thÿ tục nội tại hệ thống mởrộng. Loại này cũng được lưu trong CSDLResouce nhưng có tên bắt đầu với xp_.41 T¿o mßt Sroted procedureCREATE PROC [EDURE] <tên thÿ tục> [(<DSách tham số>)]ASBEGIN[DECLARE <biến cục bộ >]<Các câu lệnh cÿa thÿ tục>END 42 Cú pháp :T¿o mßt sroted procedure (tt)####### CREATE PROC[EDURE] <tên thÿ tục> [(<DSách tham số>)] ####### AS ####### [BEGIN] [DECLARE <biến cục bộ >] <Các câu lệnh cÿa thÿ tục> ####### [END] 43 ####### Ví dÿ 1: CREATE PROCEDURE TinhTong (@a int, @b int) ####### AS ####### Begin ####### Declare @kq int ####### Set @kq = @a + @b ####### Print @kq ####### End T¿o mßt sroted procedure (tt)####### CREATE PROC[EDURE] <tên thÿ tục> [(<DSách tham số>)] ####### AS ####### [BEGIN] [DECLARE <biến cục bộ >] <Các câu lệnh cÿa thÿ tục> ####### [END] 44 ####### Ví dÿ 2 : CREATE PROCEDURE sp_NVP (@mp int) ####### AS ####### SELECT * FROM NhanVien WHERE Maphong=@mp T¿o mßt sroted procedure (tt) Ví dÿ 3 : Viết thÿ tục in ra tổng cÿa các số từ 1..####### CREATE PROCEDURE Tinhtong (@n int) ####### AS ####### Declare @tong int, @i int ####### Select @tong=0, @i=0 ####### While @i<=@n ####### Begin ####### Set @tong=@tong+@i ####### Set @i=@i+1 ####### End ####### Print @tong ####### GO 45 T¿o mßt sroted procedure (tt) Ví dÿ 4 : Cho CSDL quản lý điểm thi như sau:46 T¿o mßt sroted procedure (tt)47 T¿o mßt sroted procedure (tt)48 T¿o mßt sroted procedure (tt)49 T¿o mßt sroted procedure (tt)50 ) Thực thi stored procedureThực thi thÿ tục bằng lời gái thÿ tục có dạng:Tên_thā_tÿc [danh_sách_các_đối_số]Lời gái thÿ tục được thực hiện bên trong một thÿtục khác, bên trong một trigger hay kết hợp với cáccâu lệnh SQL khác, sử dụng cú pháp :EXECUTE tên_thā_tÿc [danh_sách_các_đối_số]HoặcEXEC tên_thā_tÿc [danh_sách_các_đối_số]51 Thực thi stored procedure (tt)Cú pháp:EXEC[UTE] <tên_thÿ_tục> [<danh sách các đối số>] 52 Số lượng các đối và thứ tự của chúng phải phù hợp với sốlượng và thứ tự của các tham số hình thứcVí dụ 1: EXEC sp_NVP 2Ví dụ 2: EXECUTE sp_LenDanhSachDiem'CST005','Cơ sở dữ liệu',5, ‘CT002'Nếu truyền các đối không theo thứ tự thì tất cả các đốiđều phải viết dưới dạng:@tên_tham_số = giá_trịTham số trong stored procedureTham số nhập####### Là tham số phải truyền giá trß vào khi gái thÿ tục Tham số xuất (giữ lại giá trß cÿa đối số saukhi kết thúc thÿ tục)####### Là tham số nhận giá trß mà thÿ tục cần trả về, ####### Cách xây dựng tham số xuất: ####### @ <Tên_tham_số> <Kiểu_dữ_liệu> OUT[PUT] Và trong lời gái thÿ tục, sau đối số đượctruyền cho thÿ tục, bạn cũng phải chỉ đßnhthêm từ khoá OUTPUT (hoặc OUT)53 Tham số trong stored procedure (tt)####### CREATE PROCEDURE ####### spCong_hai_so (@a ####### INT,@b INT, @c INT OUT) AS SELECT @c=@a+@b GO ####### Và lời gái thực thi: DECLARE @tong INT SELECT @tong=0 EXECUTE spCong_hai_so 100,200,@tong OUT Print @tong 54 ####### Ví dÿ: ####### CREATE PROCEDURE ####### spCong_hai_so (@a INT,@b ####### INT, @c INT) AS SELECT @c=@a+@b GO ####### Và lời gọi thực thi ####### DECLARE @tong INT SELECT @tong=0 EXECUTE spCong_hai_so 100,200,@tong Print @tong Tham số vßi giá trß mặc đßnhGiá trß mặc đßnh sẽ được gán cho tham số trongtrường hợp không truyền đối số cho tham số khicó lời gái đến thÿ tục.Cú pháp:####### @tên_tham_số <kiểu_dữ_liệu> = giá_trß_mặc_đßnh Ví dụ: Viết thÿ tục spTestDefault như sau:55 Tham số vßi giá trß mặc đßnh (tt)CREATE PROC spTestDefault(@tenlop NVARCHAR(30) =NULL , @noisinh NVARCHAR(100) ='Hu¿‘ ) AS IF @tenlop IS NULL SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien=lop WHERE noisinh like ('%'+@noisinh) ELSE SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien=lop WHERE noisinh like ('%'+@noisinh) AND tenlop=@tenlop GO 56 Tham số vßi giá trß mặc đßnh (tt)Thực hiện các lời gái thÿ tục với các mục đíchkhác nhau như sau:####### Cho biết há tên cÿa các sinh viên sinh tại Huế: spTestDefault ####### Cho biết há tên cÿa các sinh viên lớp dữ liệu 2 sinh tại ####### Huế: spTestDefault @tenlop=N'dữ liệu 2' 57 Tham số vßi giá trß mặc đßnh (tt)Thực hiện các lời gái thÿ tục với các mục đíchkhác nhau như sau:####### Cho biết há tên cÿa các sinh viên sinh tại Quảng nam spTestDefault @noisinh=N'Quảng nam' ####### Cho biết há tên cÿa các sinh viên lớp đồ háa 3 sinh tại ####### Đà Nẵng: spTestTefault @tenlop=N'Đồ háa 3', @noisinh=N'Đà Nẵng' 58 Tham số Table59 Ví dÿ 1: Tham số Table (tt)Vấn đề:####### Āng dụng cho người dùng nhập đơn hàng trên Form ####### (bao gồm thông tin chung và thông tin riêng cÿa từng chi ####### tiết đơn hàng). ####### Vì tính an ninh dữ liệu, āng dụng không thể trực tiếp ####### insert dữ liệu vào các table mà phải thông qua các ####### stored procedure (SP) ####### Làm sao truyền dữ liệu trên form vào SP? Giải pháp:####### Dùng SP có tham số là table (chỉ có từ phiên bản SQL ####### Server 2008) 60 Tham số Table (tt) Ví dÿ 2:####### Cho lược đồ dữ liệu như sau: Hoadon(MaHD,MaKH,NgayLap,TongTien) CTHOADON(MaHD,MaSP,SoLuong,DonGiaBan,ThanhTie n) ####### B°ßc 1: T¿o kiểu dữ lißu bÁng t¿m để chứa các đ¡n ####### hàng từ Form truyÁn xuống: CREATE TYPE tbTamCTHD AS TABLE ( HD varchar(10), SP varchar(10), SL float, DG float, TT float ) 61 Tham số Table (tt)####### B°ßc 2: Vi¿t thā tÿc nh¿n tham số là kiểu dữ lißu ####### bÁng t¿m tbTamCTHD để đổ dữ lißu từ bÁng t¿m vào ####### bÁng thực sự tên CSDL : CREATE PROC uspNhapHD (@MaHD varchar(10), @Makh varchar(10), @Ngay Date, @CT tbTamCTHD ReadOnly) AS Declare @tt float Set @tt = (Select Sum(SL*DG) From @CT) Insert Into HoaDon Values @MaHD, @MaKH, @Ngay, @tt Update @CT Set HD = @MaHD, TT = SL * DG Insert Into CTHOADON Select * From @CT GO 62 Tham số Table (tt) B°ßc 3: Sử dÿng thā tÿc vừa vi¿t####### Declare @CT tbTamCTHD ####### Insert Into @CT Values (&) ####### Insert & ####### EXEC uspNhapHD 8HD0019, 8KH0019, 82015-8-319, @CT ####### GO 63 Thay đổi, xóa stored procedureThay đổi: Alter Proc <Tên thÿ tục>Xóa: Drop Proc <Tên thÿ tục>64 HÀMHàm là đối tượng cơ sở dữ liệu tương tự nhưthÿ tục.Điểm khác biệt giữa hàm và thÿ tục:####### Hàm trả về một giá trß thông qua tên hàm còn thÿ tục ####### thì không. 65 HÀMHàm gồm 3 lo¿i:Hàm trả về một giá trß có kiểu cơ sở nhưint, varchar, float, datetime, &Hàm trả về một table (tương tự view),thường trong làm là một câu truy vấn lấydữ liệu.Hàm trả về một table được đßnh nghĩa cấutrúc ngay trong hàm và dữ liệu có đượcnhờ thực hiện một dãy các thao tác insert66 HÀM TRÀ VÀ MÞT GIÁ TRÞCREATE FUNCTION tên_hàm ([danh_sách_tham_số])RETURNS (kiểu_cÿa_giá_trß_trả_về)ASBEGINThân hàmReturn <giá trß trả về>END 67 Cú phápVí dÿHàm trÁ vÁ mßt giá trß68 Ví dÿHàm trÁ vÁ mßt giá trßselect dbo(‘27/09/2017') 69CREATE FUNCTION thu (@ngay DATETIME) RETURNS NVARCHAR( 10 ) AS BEGIN DECLARE @tt NVARCHAR( 10 ) SELECT @tt= 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 (@tt)/* Giá Trị trả về của hàm*/ END Ví dÿHàm trÁ vÁ mßt giá trßViết hàm tính số ngày cÿa một tháng.70 Hàm trÁ vÁ mßt bÁng (t°¡ng tự view)CREATE FUNCTION <tên_hàm> ([danh sách thamsố]) RETURNS TABLEASRETURN (câu lệnh select)71 ####### Chú ý:
####### RETURNS TABLE.
####### RETURN xác đßnh giá trß trả về cÿa hàm thông qua duy ####### nhất một câu lệnh SELECT (không sử dụng bất kỳ câu ####### lệnh nào khác trong phần thân thân hàm) Cú phápVí dÿhàm trÁ vÁ mßt bÁng72 CREATE FUNCTION FXemThongTinNCC(@dc nvarchar( 30 )) RETURNS TABLE AS RETURN SELECT cc, cc, cc, cc, ch, Soluong*Dongia as thanhtien FROM Chuyenhang ch join NhaCC cc On ch =cc WHERE cc=@dc gọi h‡m Select * From FXemThongTinncc('TP HCM') Khi gọi h‡m cÛ kißu trả vß l‡ 1 bảng ta d ̆ng c ̇ ph·p SELECT * FROM TÍn_H‡m Ví dÿHàm trÁ vÁ mßt bÁngVD 2: Vi¿t hàm xem điểm trung bình cāa mßt sinh viên b¿t kỳ CREATE FUNCTION XEMDTB( @MaSV int) RETURNS TABLE AS RETURN SELECT student, StudentName, AVG(mark) AS DTB FROM Student join Mark on Student = Mark WHERE Mark=@MaSV GROUP BY student, StudentName --GàI HÀM SELECT * FROM dbo(4) 73 Điểm khác biệt chính giữa functions và stored procedures là gì?2. Sự khác biệt cơ bản giữa Stored Procedure và Function. Thủ tục lưu trữ có thể trả về giá trị zero, một hoặc nhiều giá trị. Trong khi hàm phải trả về một giá trị duy nhất (có thể là bảng). Khi nào dùng Store 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.. Procedure và trigger là gì?Trigger là một loại stored procedure đặc biệt (không có tham số) được thực thi (execute) một cách tự động khi có một sự kiện thay đổi dữ liệu (data modification). Trigger được lưu trữ và quản lý trong Server DB, được dùng trong trường hợp ta muốn kiểm tra các ràng buộc toàn vẹn trong DB. Procedure trong SQL dùng để làm gì?Mục đích của PROCEDURE trong SQL Tái sử dụng: PROCEDURE cho phép bạn đóng gói các câu lệnh SQL liên quan vào một đơn vị độc lập có thể được gọi nhiều lần từ nhiều chương trình hoặc truy vấn khác nhau. Điều này giúp giảm thiểu sự lặp lại mã và giữ cho mã SQL dễ dàng bảo trì. |