合并跨数据库关联表并同步UserID,避免重复ID的实现方案
跨数据库关联表合并方案(保持UserID关联同步)
核心思路
先给所有待合并的Users_Detail记录分配唯一新UserID,建立原记录(来源库+原UserID+NickName)到新ID的映射,再基于这个映射同步更新Sys_User_Ghost的关联UserID,最后合并到目标库表中。
步骤1:创建临时映射表,生成唯一新UserID
整合两个数据库的Users_Detail数据,为每条记录分配不重复的新UserID,同时记录原数据的来源库、原UserID,方便后续关联Sys_User_Ghost。
USE Database1; -- 创建临时映射表 CREATE TABLE #UserID_Map ( New_UserID INT IDENTITY(1,1) PRIMARY KEY, Source_DB VARCHAR(50), Original_UserID INT, NickName VARCHAR(50) ); -- 导入Database1的Users_Detail数据 INSERT INTO #UserID_Map (Source_DB, Original_UserID, NickName) SELECT 'Database1', UserID, NickName FROM Database1.dbo.Users_Detail; -- 导入Database2的Users_Detail数据 INSERT INTO #UserID_Map (Source_DB, Original_UserID, NickName) SELECT 'Database2', UserID, NickName FROM Database2.dbo.Users_Detail;
执行后,#UserID_Map中的New_UserID就是目标表需要的唯一ID,完全匹配你给出的目标结构。
步骤2:合并更新目标库的Users_Detail
根据需求选择清空原表(覆盖场景)或直接追加,再从映射表插入整理好的数据:
-- 清空目标表(仅覆盖场景需要,不需要则跳过) TRUNCATE TABLE Database1.dbo.Users_Detail; -- 插入映射后的新数据 INSERT INTO Database1.dbo.Users_Detail (UserID, NickName) SELECT New_UserID, NickName FROM #UserID_Map;
执行后,Database1.dbo.Users_Detail将与目标结构完全一致。
步骤3:合并更新Sys_User_Ghost表,同步关联新UserID
整合两个数据库的Sys_User_Ghost数据,通过映射表匹配新UserID,插入到目标表并生成连续ID:
-- 清空目标表(仅覆盖场景需要,不需要则跳过) TRUNCATE TABLE Database1.dbo.Sys_User_Ghost; -- 导入Database1的Sys_User_Ghost数据,关联新UserID INSERT INTO Database1.dbo.Sys_User_Ghost (UserID, Value) SELECT m.New_UserID, sg.Value FROM Database1.dbo.Sys_User_Ghost sg JOIN #UserID_Map m ON m.Source_DB = 'Database1' AND m.Original_UserID = sg.UserID; -- 导入Database2的Sys_User_Ghost数据,关联新UserID(注意字段别名转换) INSERT INTO Database1.dbo.Sys_User_Ghost (UserID, Value) SELECT m.New_UserID, sg.NickName AS Value FROM Database2.dbo.Sys_User_Ghost sg JOIN #UserID_Map m ON m.Source_DB = 'Database2' AND m.Original_UserID = sg.UserID;
说明:Database2的
Sys_User_Ghost中存储值的字段名为NickName,实际是Value内容,因此用别名转换匹配目标表结构。
执行后,Database1.dbo.Sys_User_Ghost的UserID将与Users_Detail的新ID完全同步,符合目标结构要求。
步骤4:清理临时表
完成所有操作后,删除临时映射表:
DROP TABLE #UserID_Map;
内容的提问来源于stack exchange,提问作者KenDzz
相关产品推荐
相关产品推荐

