Cursors trong MS SQL Server là gì, cách sử dụng?
Nếu giải thích một cách ngắn gọn thì cursor tương tự như recordset hay dataset trong programming. Nghĩa là ta select một số data vào memory sau đó có thể lần lượt làm việc với từng record bằng cách Move Next...

Có 3 loại cursors là Transact- SQL Cursors, API Cursors và Client Cursors. Trong đó Transact-SQL và API thuộc loại Server Cursors nghĩa là cursors được load lên và làm việc bên phía server. Trong khuôn khổ bài học này ta chỉ nghiên cứu Transact-SQL cursors.

Transact-SQL cursors được tạo ra trên server bằng các câu lệnh Transact-SQL và chủ yếu được dùng trong stored procedures và triggers. Trước hết hãy xem qua một ví dụ về cursor:

               DECLARE @au_lname varchar(40), @au_fname varchar(20)
                DECLARE Employee_Cursor CURSOR FOR 
               SELECT LastName, FirstName FROM Northwind.dbo.Employees 
                OPEN Employee_Cursor 
                FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname 
               WHILE @@FETCH_STATUS = 0 
               BEGIN 
                               PRINT 'Author:' + @au_fname + ' ' + @au_lname
                               FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname
               END
                CLOSE Employee_Cursor
                DEALLOCATE Employee_Cursor 

Trong ví dụ ở trên ta sẽ select LastName và FirstName từ Employees table của Northwind database và load vào Employee_Cursor sau đó lần lượt in tên của các employee ra màn hình. Ðể làm việc với một cursor ta cần theo các bước sau:

1. Dùng câu lệnh DECLARE CURSOR để khai báo một cursor. Khi khai báo ta cũng phải cho biết câu lệnh SELECTsẽ được thực hiện để lấy data.

2. Dùng câu lệnh OPEN để đưa data lên memory (populate data). Ðây chính là lúc thực hiện câu lệnh SELECT vốn được khai báo ở trên.

3. Dùng câu lệnh FETCH để lấy từng hàng data từ record set. Cụ thể là ta phải gọi câu lệnh FETCH nhiều lần. FETCH tương tự như lệnh Move trong ADO recordset ở chỗ nó có thể di chuyển tới lui bằng câu lệnh FETCH FIRST, FETCH NEXT, FETCH PRIOR, FETCH LAST, FETCH ABSOLUTE n, FETCH RELATIVE n nhưng khác ở chỗ là nó lấy data bỏ vào trong variable (FETCH...FROM...INTO variable_name). Thông thường ta FETCH data trước sau đó loop cho tới record cuối của Cursor bằng vòng lặp WHILE bằng cách kiểm tra global variable @@FETCH_STATUS (=0 nghĩa là thành công).

4. Khi ta viếng thăm từng record ta có thể UPDATE hay DELETE tùy theo nhu cầu (trong thí dụ này chỉ dùng lệnh PRINT)

5. Dùng câu lệnh CLOSE để đóng cursor. Một số tài nguyên (memory resource) sẽ được giải phóng nhưng cursor vẫn còn được khai báo và có thể OPEN trở lại.

6. Dùng câu lệnh DEALLOCATE để phóng thích hoàn toàn các tài nguyên dành cho cursor (kể cả tên của cursor).

Lưu ý là trong ví dụ ở trên trước khi dùng Cursor ta cũng declare một số variable (@au_fname và @au_lname) để chứa các giá trị lấy được từ cursor. Bạn có thể dùng Query Analyzer để chạy thử ví dụ trên.

 

Bài viết cùng danh mục

Điều nên làm sau khi ăn để tránh béo bụng
Chia sẻ Một số người sau khi ăn thường có thói quen uống một tách trà hoặc đi ngủ ngay sau đó. Thực tế đây là những thói quen lợi ít hại nhiều vì chúng cản trở hệ tiêu hóa.
Giảm cân an toàn với bột gạo lứt
Chia sẻ Giảm cân bằng gạo lứt luôn là phương pháp hữu dụng mang lại hiệu quả nhanh và bền vững. Bởi thành phần chính là chất xơ cao hơn gạo bình thường gấp 2 lần, nên khi ăn gạo lứt quá trình tiêu hóa của bạn sẽ chậm hơn và cũng làm cho dạ dày có cảm giác no lâu hơn.
Nguyên tắc chăm sóc da vùng chữ T luôn sạch dầu
Chia sẻ Khu vực chữ T quanh mũi này có nhiều tuyến nhờn hơn, khiến bụi bẩn dễ dồn ứ gây tắc lỗ chân lông, cộng với việc những lớp tế bào chết liên tục tạo thành mỗi ngày che lấp làm da thêm xỉn màu và bị nhờn bóng.
In bài viết Bí quyết để sở hữu vẻ đẹp không son phấn
Chia sẻ Chẳng cần tốn thời gian hay tiền bạc để đổ vào make up, chị em phụ nữ hoàn toàn có thể trở nên xinh đẹp nhờ vào loạt bí kíp đơn giản sau.
Tẩy tế bào chết cho da mụn sao cho không tổn thương da?
Chia sẻ Đối với những loại mụn bít tắc như mụn đầu đen, đầu trắng, mụn ẩn thì tẩy tế bào chết sẽ giúp loại bỏ và ngăn ngừa hiệu quả. Dưới đây là cách tẩy tế bào chết cho da mụn đúng cách.