如何使用BCP导入数据时保留Identity列的原有值?
如何用BCP导入数据时保留Identity列的值?
要让BCP导入时保留id列(Identity列)的原始值,你需要完成两个关键操作:开启表的Identity插入权限,同时修改BCP命令添加对应参数,具体步骤如下:
第一步:开启Identity插入权限
SQL Server默认会阻止手动向Identity列插入值,所以在导入前,你需要先在SQL Server中执行这条命令,允许目标表接受自定义的Identity值:SET IDENTITY_INSERT framework.att.attendance ON;注意:同一时间,SQL Server只允许一个表开启
IDENTITY_INSERT,如果其他表也开启了这个设置,记得先关闭再操作当前表。第二步:修改BCP导入命令
在你原来的BCP命令基础上,添加-E参数——这个参数的作用就是告诉BCP:"不要自动生成Identity值,直接用源文件里的原始值"。修改后的完整命令是:BCP framework.att.attendance in "D:\test\mhd.txt" -T -c -E第三步:导入完成后关闭权限
导入成功后,一定要关闭IDENTITY_INSERT,这样后续对这个表的正常插入操作才能自动生成Identity值:SET IDENTITY_INSERT framework.att.attendance OFF;
额外注意事项
- 确保你的源文件
mhd.txt里的id值没有和目标表中已存在的Identity值重复,否则导入会触发主键/唯一约束报错; - 如果源文件的列顺序和目标表的列顺序不一致,你可能还需要用
-f参数指定格式文件,确保列映射正确,否则Identity值可能会被导入到错误的列中。
内容的提问来源于stack exchange,提问作者Mohammad Naghsh
相关产品推荐
相关产品推荐

