如何修改MS SQL插入语句,将单条源数据拆分为两条插入目标表
解决方案
你可以通过UNION ALL拼接两个查询结果,为每条源记录生成两条目标记录,这是所有主流SQL数据库都支持的通用写法:
INSERT INTO OutputTable (CaseKey, Note, LastModifiedBy, LastModifiedDate) -- 第一条记录:提取Note1字段内容 SELECT CaseID, Note1, UpdatedBy, UpdatedDate FROM InputTable UNION ALL -- 第二条记录:提取Note2字段内容 SELECT CaseID, Note2, UpdatedBy, UpdatedDate FROM InputTable
如果使用的是支持CROSS APPLY的数据库(比如SQL Server、Azure SQL),还可以用更简洁的行转列思路实现:
INSERT INTO OutputTable (CaseKey, Note, LastModifiedBy, LastModifiedDate) SELECT t.CaseID, n.NoteContent, t.UpdatedBy, t.UpdatedDate FROM InputTable t CROSS APPLY ( VALUES (t.Note1), (t.Note2) ) n(NoteContent)
补充说明
- 优先使用
UNION ALL而非UNION,因为不需要去重处理,性能更高效 - 第二种写法里,
CROSS APPLY会将每条源记录与VALUES中的两个字段值配对,自动生成两条目标记录
内容的提问来源于stack exchange,提问作者Jonathan Small
相关产品推荐
相关产品推荐

