You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何在事务中将Employee_table中的重复姓名记录迁移至Dupes表

处理重复姓名记录迁移的简易SQL方案

嘿,作为SQL新手,我特意给你准备了最直白易懂的操作步骤,完全匹配你的需求,语句简单好上手~

1. 先创建和原表结构一致的Dupes表

因为你提到Division列后还有很多列,手动写列名太麻烦,用下面的语句可以一键复制原表结构,不会带入原表数据:

SELECT * INTO Dupes FROM Employee_table WHERE 1=0;

小提示:WHERE 1=0的作用是只复制表结构,不会把原表数据带进去,特别适合列多的场景。

2. 在事务中完成迁移操作

用事务能保证要么所有操作都成功,要么全部回滚,绝对不会出现一半数据移走、一半留在原表的尴尬情况:

BEGIN TRANSACTION;

-- 第一步:把所有重复姓名的记录插入Dupes表
INSERT INTO Dupes
SELECT * FROM Employee_table
WHERE CONCAT(FirstName, ' ', LastName) IN (
    SELECT CONCAT(FirstName, ' ', LastName)
    FROM Employee_table
    GROUP BY FirstName, LastName
    HAVING COUNT(*) > 1 -- 筛选出出现2次及以上的姓名
);

-- 第二步:从原表删除这些已迁移的记录
DELETE FROM Employee_table
WHERE CONCAT(FirstName, ' ', LastName) IN (
    SELECT CONCAT(FirstName, ' ', LastName) FROM Dupes
);

-- 如果确认操作没问题,就提交事务;如果出错,把下面的COMMIT改成ROLLBACK就能撤销所有操作
COMMIT TRANSACTION;

新手友好的补充说明

  • 关于字符串拼接:如果用的是SQL Server,把CONCAT换成FirstName + ' ' + LastName就行;MySQL和PostgreSQL用CONCAT是通用写法。
  • 为什么用Dupes表关联删除?这样不用重复执行分组统计,效率更高,也更不容易出错。
  • 事务的重要性:比如插入Dupes表成功了,但删除原表时出错,执行ROLLBACK TRANSACTION就能把数据恢复到操作前的状态,安全又可靠。

内容的提问来源于stack exchange,提问作者bigShaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:02:40