Một ví dụ về cursor trong SQL Server

Ngày đưa:  07/08/2019 10:46:33 AM In bài
Xin chào tất cả các bạn, những ai đang theo học môn CSDL thì cũng đã từng hoặc sẽ học qua Cursor. Để hiểu rõ hơn về vấn đề này chúng ta theo dõi bài toán sau:

 Yêu cầu: Tôi muốn backup tất cả Database trong hệ thống (hệ quản trị CSDL SQL Server 2008 làm ví dụ)

 
Hướng giải quyết: Bạn hãy xem tất cả DataBase trong hệ thống là một danh sách. Chúng ta sẽ duyệt danh sách này theo từng dòng và mỗi dòng bạn thực hiện thao tác Backup tương ứng với nó.
 
Phân tích:
-Nên đặt tên DataBase sẽ backup theo dạng:
TenDataBase_Ngay_+’.bak’
-Tạo một con trỏ duyệt danh sách các DataBase của hệ thống.
-Thực hiện BackupData tương ứng.
 
Mẫu code:
 
DECLARE @name VARCHAR(50) — Tên Databse sẽ duyệt
DECLARE @path VARCHAR(256) — đường dẫn file backup
DECLARE @fileName VARCHAR(256) — tên file backup
DECLARE @fileDate VARCHAR(20) — đường dẫn để đặt theo tên từng file backup
 
SET @path = ‘D:\ThuMucbackUp\’ — thu muc chua cac file duoc Backup
 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)–ngay thang se backup
–Định nghĩa Cursor
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases –lấy danh sách tên DataBase từ hệ thống
WHERE name NOT IN (‘master’,’model’,’msdb’,’tempdb’) –những DataBase không cần backup, nếu bạn muốn backup hết thì bỏ dòng này
 
OPEN db_cursor –mở con trỏ để duyệt danh sách
FETCH NEXT FROM db_cursor INTO @name
 
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + ‘_’ + @fileDate + ‘.BAK’ — Tên Datase sẽ được lưu.
BACKUP DATABASE @name TO DISK = @fileName
 
FETCH NEXT FROM db_cursor INTO @name –duyet record kế tiếp
END
 
CLOSE db_cursor –đóng con trỏ
DEALLOCATE db_cursor — giải phóng con trỏ
 
Bạn có thể cài đặt 1 Job trong SQL SERVER để thực hiện tự động việc backup này.

Bản quyền ©2011 Trung tâm CNTT và TT Quảng Ngãi