我在尝试使用BCP向表中插入数据时遇到问题。该表有一个标识列。我正在从文本文件中获取输入。如果有任何好的解决方案,请告诉我。
此致 茶烟
答案 0 :(得分:10)
我需要做同样的事情,我的同事指出你可以使用BCP上的-E开关来做到这一点。
来自文档...
“ - E指定导入数据文件中的标识值将用于标识列。如果未给出-E,则忽略正在导入的数据文件中此列的标识值。”< / p>
谢谢Jan!
答案 1 :(得分:7)
你有两个选择:
执行不插入IDENTITY列的值,让SQL Server为您处理
如果您不能或不想这样做,则需要在该表上打开IDENTITY_INSERT,然后插入该值,然后再将其关闭:
SET IDENTITY_INSERT (table name) ON
-- do your bcp import here
SET IDENTITY_INSERT (table name) OFF
使用此设置,您可以将自己的值插入IDENTITY列。
如果这样做,您可能还需要在插入后重新设置标识列,以避免IDENTITY中出现任何可能的重复:
DBCC CHECKIDENT('table name', RESEED)
答案 2 :(得分:4)
创建不包含标识列的视图也很有用,不需要格式文件:
bcp mydb.dbo.myview in file.txt -S(local) -T -e err.log -c