用户离职后网盘数据交接的实现

企业给用户开通了mobox私域网盘,用户在单位上班一段时间后离职。而这个用户已经上传的网盘数据,需要有新人接手,为此,系统提供了一个网盘数据交接的脚本。运行脚本后,重启 netdiskwebs 服务,来生效这个操作

-- 个人网盘用户A 所有网盘数据都转至 用户B 根目录下的一个目录中(此目录自动创建,名称:转自【用户A】_YYYYmmdd)
BEGIN
Declare @strUserLogin1 as nvarchar(32)
Declare @strUserLogin2 as nvarchar(32)
Declare @strUserName1 as nvarchar(64)
Declare @strUserName2 as nvarchar(64)
Declare @nUserIndex1 as int
Declare @nUserIndex2 as int
Declare @strTabIndex1 as nchar(1)
Declare @strTabIndex2 as nchar(1)
Declare @strCatalogID as nvarchar(36)
Declare @strCatalogName as nvarchar(64)
Declare @strSQL as nvarchar(1024)
Declare @strOwner as nvarchar(32)
Declare @strOwnerName as nvarchar(64)
Declare @nNDIndex as int
Declare @strDate as nvarchar(8)

-- 指定用户A 与 用户B 的登录名,最好小写
Set @strUserLogin1 = N'用户A'
Set @strUserLogin2 = N'用户B'

Set @nUserIndex1 = -1
Set @nUserIndex2 = -1
-- 申请游标,得到用户个人网盘信息
Declare userindex_cursor cursor for (SELECT Lower( CN_S_OWNER_ID ), CN_S_OWNER_NAME, CN_N_NDX FROM OI_ND_USER WHERE CN_S_OWNER_ID IN ( @strUserLogin1, @strUserLogin2 ) )
-- 打开游标
Open userindex_cursor

-- 开始循环游标变量
Fetch Next From userindex_cursor into @strOwner, @strOwnerName, @nNDIndex
-- FETCH 后的游标状态
While @@FETCH_STATUS = 0
Begin
If @strOwner = @strUserLogin1
Begin
Set @nUserIndex1 = @nNDIndex
Set @strUserName1 = @strOwnerName
End
Else
Begin
Set @nUserIndex2 = @nNDIndex
Set @strUserName2 = @strOwnerName
End

-- 转到下一个游标
Fetch Next From userindex_cursor into @strOwner, @strOwnerName, @nNDIndex
End

-- 关闭游标
Close userindex_cursor
-- 释放游标
Deallocate userindex_cursor

-- 判断用户索引
If @nUserIndex1 = -1 Or @nUserIndex2 = -1
Begin
Print N'指定的用户不存在'
Return
End

-- 生成表索引
Set @strTabIndex1 = Str( @nUserIndex1, 1 )
Set @strTabIndex2 = Str( @nUserIndex2, 1 )

-- 在用户B根目录下创建存放转移数据的目录:转自【用户A】_YYYYmmdd
Print N'创建转移数据的目录'
Set @strCatalogID = NewID()
Set @strDate = Left( Convert( char(8), GetDate(), 112 ), 8 )
Set @strCatalogName = '转自【' + @strUserName1 + '】_' + @strDate
Set @strSQL = N'INSERT INTO OI_ND_CATALOG ( CN_S_ID, CN_S_NAME, CN_N_DOC_LIST_TYPE, CN_N_SHARE, CN_S_CREATOR_ID, CN_S_CREATOR, CN_T_CREATE, CN_N_ORDER, CN_S_PARENTID ) ' +
N'VALUES ( ''' + @strCatalogID + ''', ''' + @strCatalogName + ''', 0, 0, ''' + @strUserLogin2 + ''', ''' + @strUserName2 + ''', GetDate(), 0, '''' )'
EXEC( @strSQL )

-- 索引值相同,直接替换
If @nUserIndex1 = @nUserIndex2
Begin
Print N'用户索引相同'
-- 个人文档表
Print N'个人文档表'
Set @strSQL = N'UPDATE OI_ND_DOC_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 根级目录文档
Print N'根级目录文档'
Set @strSQL = N'UPDATE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CATALOG_ID = ''' + @strCatalogID + N''' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 子级目录文档
Print N'子级目录文档'
Set @strSQL = N'UPDATE OI_ND_CATATLOG_HLINK_' + @strTabIndex1 + N' SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
End
-- 索引值不同,数据记录迁移(记录复制至 B用户索引表,删除A用户索引表记录)
Else
Begin
Print N'用户索引不相同'
-- 个人文档表,复制
Print N'个人文档表,复制'
Set @strSQL = N'INSERT INTO OI_ND_DOC_' + @strTabIndex2 + N' ( CN_S_ID, CN_S_FILE_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_T_FILE_DATETIME, CN_S_FILE_MD5, CN_S_FILE_SERVER, CN_G_FILE_ID, CN_G_PDF_FILE_ID, CN_G_FLASH_FILE_ID, CN_G_THUMB_IMAGE_ID, CN_S_THUMB_URL, ' +
N'CN_S_CREATOR_ID, CN_S_CREATOR, CN_T_CREATE, CN_S_VERSION, CN_S_TAGS_NAME, CN_N_SHARE, CN_N_MOD, CN_S_NOTE, CN_S_SYS_NOTE ) ' +
N'SELECT CN_S_ID, CN_S_FILE_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_T_FILE_DATETIME, CN_S_FILE_MD5, CN_S_FILE_SERVER, CN_G_FILE_ID, CN_G_PDF_FILE_ID, CN_G_FLASH_FILE_ID, CN_G_THUMB_IMAGE_ID, CN_S_THUMB_URL, ' +
N'''' + @strUserLogin2 + N''', ''' + @strUserName2 + N''', CN_T_CREATE, CN_S_VERSION, CN_S_TAGS_NAME, CN_N_SHARE, CN_N_MOD, CN_S_NOTE, CN_S_SYS_NOTE ' +
N'FROM OI_ND_DOC_' + @strTabIndex1 +
N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 删除
Print N'个人文档表,删除'
Set @strSQL = N'DELETE OI_ND_DOC_' + @strTabIndex1 + N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 根级目录文档,复制
Print N'根级目录文档,复制'
Set @strSQL = N'INSERT INTO OI_ND_CATALOG_HLINK_' + @strTabIndex2 + N' ( CN_S_CREATOR_ID, CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ) ' +
N'SELECT ''' + @strUserLogin2 + N''', ''' + @strCatalogID + N''', CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ' +
N'FROM OI_ND_CATALOG_HLINK_' + @strTabIndex1 +
N' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 删除
Print N'根级目录文档,删除'
Set @strSQL = N'DELETE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' WHERE (CN_S_CATALOG_ID IS NULL OR CN_S_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 子级目录文档,复制
Print N'子级目录文档,复制'
Set @strSQL = N'INSERT INTO OI_ND_CATALOG_HLINK_' + @strTabIndex2 + N' ( CN_S_CREATOR_ID, CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ) ' +
N'SELECT ''' + @strUserLogin2 + N''', CN_S_CATALOG_ID, CN_S_OBJ_ID, CN_S_DISPLAY_NAME, CN_S_FILE_TYPE, CN_N_FILE_SIZE, CN_S_THUMB_URL, CN_T_FILE_DATETIME, CN_S_EXTATTR, CN_N_SHARE, CN_T_LINK, CN_S_TAGS ' +
N'FROM OI_ND_CATALOG_HLINK_' + @strTabIndex1 +
N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 删除
Print N'子级目录文档,删除'
Set @strSQL = N'DELETE OI_ND_CATALOG_HLINK_' + @strTabIndex1 + N' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
End

-- 未分表的数据表,直接替换
-- 回收站,原根目录文档
Print N'回收站,原根目录文档'
Set @strSQL = N'UPDATE OI_ND_DOC_DELETE SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_DELETED_BY_ID = ''' + @strUserLogin2 + N''', CN_S_DELETED_BY = ''' + @strUserName2 + N''', CN_G_CATALOG_ID = ''' + @strCatalogID + N''' ' +
N'WHERE (CN_G_CATALOG_ID IS NULL OR CN_G_CATALOG_ID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 回收站,其它目录文档
Print N'回收站,其它目录文档'
Set @strSQL = N'UPDATE OI_ND_DOC_DELETE SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_DELETED_BY_ID = ''' + @strUserLogin2 + N''', CN_S_DELETED_BY = ''' + @strUserName2 + N''' ' +
N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 历史表
Print N'历史表'
Set @strSQL = N'UPDATE OI_ND_DOC_HISTORY SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_OPERATOR_ID = ''' + @strUserLogin2 + N''', CN_S_OPERATOR = ''' + @strUserName2 + N''' ' +
N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 根级目录
Print N'根级目录'
Set @strSQL = N'UPDATE OI_ND_CATALOG SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''', CN_S_PARENTID = ''' + @strCatalogID + N''' ' +
N'WHERE (CN_S_PARENTID IS NULL OR CN_S_PARENTID = '''') AND CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
-- 子级目录
Print N'子级目录'
Set @strSQL = N'UPDATE OI_ND_CATALOG SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' ' +
N'WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 共享出去信息替换
Print N'共享出去信息替换'
Set @strSQL = N'UPDATE OI_ND_SHARE_OUT SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )

-- 删除共享进来 A -> B,B -> A 记录
Print N'删除共享进来 A -> B,B -> A 记录'
Set @strSQL = N'DELETE OI_ND_SHARE_IN WHERE (CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''' AND CN_S_SHARER_ID = ''' + @strUserLogin2 + N''') OR (CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''' AND CN_S_SHARER_ID = ''' + @strUserLogin1 + N''')'
EXEC( @strSQL )
-- 共享进来信息替换
Print N'共享进来信息替换'
Set @strSQL = N'UPDATE OI_ND_SHARE_IN SET CN_S_CREATOR_ID = ''' + @strUserLogin2 + N''', CN_S_CREATOR = ''' + @strUserName2 + N''' WHERE CN_S_CREATOR_ID = ''' + @strUserLogin1 + N''''
EXEC( @strSQL )
END
GO

原文地址:https://www.cnblogs.com/mobox/p/14975603.html