Cấp bậc tác giả:

DATABASE

Tạo thủ tục trong SQL giúp Insert dữ liệu từ bảng cũ sang bảng mới

Được viết bởi webmaster ngày 08/07/2021 lúc 06:16 PM
Giả sử bạn có bảng thành viên, bảng này có đầy đủ thông tin và có cột quyền hạn, nhưng 1 người có nhiều quyền hạn. Do đó, bạn suy nghĩ sẽ bổ sung bảng chứa quyền hạn cho thành viên này. Tuy nhiên, dữ liệu bây giờ là khá nhiều, không thể xóa dữ liệu để làm lại.
  • 0
  • 670

Tạo thủ tục trong SQL giúp Insert dữ liệu từ bảng cũ sang bảng mới


Giả sử bạn có bảng thành viên, bảng này có đầy đủ thông tin và có cột quyền hạn, nhưng 1 người có nhiều quyền hạn. Do đó, bạn suy nghĩ sẽ bổ sung bảng chứa quyền hạn cho thành viên này. Tuy nhiên, dữ liệu bây giờ là khá nhiều, không thể xóa dữ liệu để làm lại. Cách duy nhất là tạo bảng mới, và cập nhật dữ liệu mã thành viên và mã quyền hạn sang bảng mới. Ý tưởng sử dụng con trỏ kết hợp trong thủ tục sql để biến điều này thành sự thật. Đồng thời, áp dụng vòng lặp for và while để duyệt qua các column trong cơ sở dữ liệu sqlserver.

Trong SQL để duyệt qua các phần tử cột (column) trong một bảng table thì chúng ta sử dụng Cursor.
Vậy Cursor là gì?
  • Là một đối tượng CSDL, được sử dụng để thao tác với từng dòng dữ liệu.
  • Khai báo con trỏ: DECLARE  CURSOR
  • Mở con trỏ:  OPEN
  • Nhận về các bản ghi: FETCH
  • Đóng con trỏ: CLOSE
  • Xoá các tham chiếu tới con trỏ: DEALLOCATE
Duyệt con trỏ
  • FETCH   [NEXT| PRIOR | FIRST |LAST| ABSOLUTE  n]
  • FROM   [INTO ]
  • FETCH FIRST: Truy xuất hàng đầu tiên.
  • FETCH NEXT: Truy xuất hàng tiếp theo
  • FETCH PRIOR: Truy xuất hàng trước hàng  hiện tại.
  • FETCH LAST: Truy xuất hàng cuối cùng.
  • FETCH ABSOLUTE n: n là một số nguyên dương, truy xuất hàng n trong con trỏ.
  • @@FETCH _STATUS: Trả về một số nguyên cho biết kết quả của lệnh truy xuất cuối cùng của con trỏ.
  • @@CURSOR_ROWS: Trả về tổng số hàng hiện tại trong con trỏ đang mở.
Ví dụ: Mình có một bảng dữ liệu hình bên dưới

thu-tuc-01.jpg

Bây giờ mình sẽ sử dụng code T-SQL để duyệt qua các phần tử trong bảng
Create proc [dbo].[proc_themQuyenHan]
as
begin
declare @maTV varchar(15)
declare @qh int
DECLARE @MyCursor CURSOR
DECLARE @i INT = 0
SET @MyCursor = CURSOR FAST_FORWARD

FOR
select MaSinhVien, quyenHan
from SinhVien

OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @maTV, @qh

WHILE @@FETCH_STATUS = 0
BEGIN
SET @i = @i +1

INSERT INTO DTNThanhVien_QuyenHan(MaThanhVien,QuyenHan)
values(@maTV, @qh)
FETCH NEXT FROM @MyCursor
INTO @maTV, @qh

end
CLOSE @MyCursor
DEALLOCATE @MyCursor
end

Kết quả sau khi chạy câu lệnh exec [dbo].[proc_themQuyenHan] trên

thu-tuc-02.jpg

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML