SQL Server如何将匹配Table3主键ID的Table2数据归档至Table4
归档Table2对应记录到Table4的实现方案
核心SQL语句
你可以通过匹配Table3中已归档的ID筛选Table2的对应记录,推荐和原Table1归档逻辑放在同一事务保证一致性,完整写法如下:
Declare @Date date set @Date = '2021-11-18' Begin transaction -- 原有Table1归档逻辑(已执行过可跳过) INSERT INTO dbo.Table3 (ID, Date, Amount) SELECT ID, Date, Amount FROM dbo.Table1 WHERE Date=@Date -- 新增Table2归档到Table4的逻辑 INSERT INTO dbo.Table4 (ID, Type) SELECT t2.ID, t2.Type FROM dbo.Table2 t2 INNER JOIN dbo.Table3 t3 ON t2.ID = t3.ID WHERE t3.Date = @Date -- 确认数据无误后可执行COMMIT,需要删除原表已归档数据可补充对应DELETE语句 Commit transaction
可选写法(IN子句实现,效果和JOIN一致)
INSERT INTO dbo.Table4 (ID, Type) SELECT ID, Type FROM dbo.Table2 WHERE ID IN ( SELECT ID FROM dbo.Table3 WHERE Date = @Date )
注意事项
- 如果你已经单独执行过Table1的归档操作,只需要执行插入Table4的部分即可,无需重复插入Table3的记录
- 执行INSERT前建议先运行SELECT语句验证筛选结果是否符合预期,避免插入错误数据:
SELECT * FROM dbo.Table2 WHERE ID IN (SELECT ID FROM dbo.Table3 WHERE Date = '2021-11-18') - 若确定Table3中当前仅包含本次归档的记录,WHERE条件中的
Date = @Date可以省略,直接取Table3全量ID即可
内容的提问来源于stack exchange,提问作者notsoexperienced
相关产品推荐
相关产品推荐

