方法一:使用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自动生成。
IMPORT WIZARD技巧
SQL Server Import and Export Wizard中,选择“Enable identity insert”为No。
跳过ID列映射,数据导入后ID自动生成唯一标识。
手动重置IDENTITY种子
导入后如果ID乱了,用DBCC CHECKIDENT ('表名', RESEED, 最大值+1);
确保下次插入从正确位置开始自增。
使用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列的勾选。