SQL Server数据导入后自增ID丢失怎么办?自增属性怎么保持自动生成唯一标识?

文章导读
方法一:使用SET IDENTITY_INSERT OFF,不导入ID列,让系统自动生成。在导入数据前执行:SET IDENTITY_INSERT 表名 OFF;然后INSERT INTO 表名 (列1,列2...) SELECT 列1,列2... FROM 源表;这样自增ID会自动从当前最大值+1开始生成。
📋 目录
  1. 方法二:BULK INSERT导入时忽略ID列
  2. SSIS导入设置
  3. IMPORT WIZARD技巧
  4. 手动重置IDENTITY种子
  5. 使用MERGE语句
A A

方法一:使用SET IDENTITY_INSERT OFF,不导入ID列,让系统自动生成。
在导入数据前执行:SET IDENTITY_INSERT 表名 OFF;
然后INSERT INTO 表名 (列1,列2...) SELECT 列1,列2... FROM 源表;
这样自增ID会自动从当前最大值+1开始生成。

方法二:BULK INSERT导入时忽略ID列

创建格式文件,只包含非ID列。
BULK INSERT 表名 FROM '数据文件' WITH (FORMATFILE = '格式文件.xml');
自增值会自动递增,不会丢失。

SSIS导入设置

在SSIS数据流中,OLE DB Destination,选择“Keep identity”选项为False。
或者使用Derived Column不映射ID列,让Identity自动生成。

SQL Server数据导入后自增ID丢失怎么办?自增属性怎么保持自动生成唯一标识?

IMPORT WIZARD技巧

SQL Server Import and Export Wizard中,选择“Enable identity insert”为No。
跳过ID列映射,数据导入后ID自动生成唯一标识。

手动重置IDENTITY种子

导入后如果ID乱了,用DBCC CHECKIDENT ('表名', RESEED, 最大值+1);
确保下次插入从正确位置开始自增。

SQL Server数据导入后自增ID丢失怎么办?自增属性怎么保持自动生成唯一标识?

使用MERGE语句

MERGE 目标表 AS target USING 源表 AS source ON 1=0
WHEN NOT MATCHED THEN INSERT (非ID列) VALUES (源列);
这样忽略ID,保持自增。

FAQ
Q: 导入数据时为什么ID会丢失或重复?
A: 因为导入了旧ID值,覆盖了自增属性,要忽略ID列导入。
Q: 如何查看当前IDENTITY种子值?
A: SELECT IDENT_CURRENT('表名');
Q: 大量数据导入后ID不连续怎么办?
A: 用DBCC CHECKIDENT重置种子到最大值+1。
Q: SSMS导入向导在哪里设置忽略ID?
A: 列映射页,取消ID列的勾选。