SQL游标 数据库编程样例

--处理file与folder中的order

-- 声明变量
DECLARE
    @fileid AS INT,
    @folderid AS INT,
    @order AS INT,
    @oldFolderId AS INT,
    @orderCursor AS INT;
-- 声明游标
DECLARE C_FILE CURSOR FAST_FORWARD FOR
    SELECT Id,FolderID,[ORDER] 
    FROM FILES where [ORDER]=0
    ORDER BY FolderId,Name;
OPEN C_FILE;

-- 取第一条记录
FETCH NEXT FROM C_FILE INTO @fileid,@folderid,@order;
set @oldFolderId = @folderid
set @orderCursor = 0
WHILE @@FETCH_STATUS=0
BEGIN
    
    if(@oldFolderId != @folderid)
    begin
        set @orderCursor = 0;
        set @oldFolderId = @folderid;
    end
    set @orderCursor = @orderCursor + 1;
    
    UPDATE FILES SET [Order]= @orderCursor WHERE Id=@fileid;
    
    -- 取下一条记录
    FETCH NEXT FROM C_FILE INTO @fileid,@folderid,@order;
END

-- 关闭游标
CLOSE C_FILE;

-- 释放游标
DEALLOCATE C_FILE;

猜你喜欢

转载自www.cnblogs.com/wswind/p/9876237.html
今日推荐