预导入处理中按'/'拆分ID为多行并存储至新临时表的方法
看起来你需要在报表预导入阶段处理带斜杠的ID拆分,同时保留原数据到指定表,拆分后的新ID存入新表。我来给你梳理下具体的实现思路和代码示例:
解决方案思路
核心分两步走:
- 先把临时表的完整数据同步到主表和临时表2,确保原ID不丢失
- 针对
RWID字段按/拆分,把拆分出来的每个子ID存入新表
具体代码示例
下面分两种常见数据库环境给出实现代码,你可以根据自己的实际环境调整:
SQL Server 环境
1. 保留原数据到主表和临时表2
这一步就是简单的批量插入,直接把临时表的所有数据复制过去:
-- 插入主表 INSERT INTO 主表 (RWID, RWLEN, DESCR, QTY, UNIT) SELECT RWID, RWLEN, DESCR, QTY, UNIT FROM 临时表; -- 插入临时表2 INSERT INTO 临时表2 (RWID, RWLEN, DESCR, QTY, UNIT) SELECT RWID, RWLEN, DESCR, QTY, UNIT FROM 临时表;
2. 拆分ID并插入新表
用SQL Server自带的STRING_SPLIT函数配合CROSS APPLY,可以把每个带斜杠的ID拆分成两行,然后批量插入新表:
-- 假设新表结构包含SplitID(拆分后的ID)和其他关联字段 INSERT INTO 新表 (SplitID, DESCR, QTY, UNIT) SELECT value AS SplitID, DESCR, QTY, UNIT FROM 临时表 CROSS APPLY STRING_SPLIT(RWID, '/');
MySQL 环境
1. 保留原数据到主表和临时表2
和SQL Server逻辑一致,直接复制数据:
-- 插入主表 INSERT INTO 主表 (RWID, RWLEN, DESCR, QTY, UNIT) SELECT RWID, RWLEN, DESCR, QTY, UNIT FROM 临时表; -- 插入临时表2 INSERT INTO 临时表2 (RWID, RWLEN, DESCR, QTY, UNIT) SELECT RWID, RWLEN, DESCR, QTY, UNIT FROM 临时表;
2. 拆分ID并插入新表
MySQL没有直接的拆分函数,我们用SUBSTRING_INDEX分别提取斜杠前后的内容,分两次插入:
-- 插入斜杠前的部分(比如T2) INSERT INTO 新表 (SplitID, DESCR, QTY, UNIT) SELECT SUBSTRING_INDEX(RWID, '/', 1) AS SplitID, DESCR, QTY, UNIT FROM 临时表; -- 插入斜杠后的部分(比如10060) INSERT INTO 新表 (SplitID, DESCR, QTY, UNIT) SELECT SUBSTRING_INDEX(RWID, '/', -1) AS SplitID, DESCR, QTY, UNIT FROM 临时表;
额外注意点
- 确保目标表的字段结构和临时表匹配,要是有字段类型差异,记得做转换
- 如果担心重复数据,可以在
SELECT后加DISTINCT,或者用数据库的重复处理机制(比如MySQL的ON DUPLICATE KEY UPDATE) - 要是你用的是ETL工具(比如SSIS、DataStage),也可以用工具自带的字符串拆分组件来实现,然后把不同的输出流分别导向对应的表
内容的提问来源于stack exchange,提问作者Newbie4598
相关产品推荐
相关产品推荐

