SQL BCP无法为标识列插入值

时间:2018-09-17 20:46:05

标签: sql sql-server bcp

我正在使用bcp utility导入制表符分隔的文件。我的表有一个标识列,当我运行bcp命令时,我收到错误消息

  

错误= [Microsoft] [SQL Server Native Client 11.0]无效的日期格式

第二列是日期时间。当我使用-E标志(很多人建议)时,出现错误

  

错误= [Microsoft] [SQL Server Native Client 11.0]强制转换规范的字符值

当我没有标识列时,一切正常。我不确定这里缺少什么。

这是一个副本:

CREATE TABLE [dbo].[test_temptable]
(
    [ID] int NOT NULL IDENTITY PRIMARY KEY,
    [Date] [datetime] NULL,
    [Column2] [varchar](100) NULL,
    [Column3] [varchar](100) NULL,
) 
ON [PRIMARY]
GO

测试数据(testTempTable.txt-制表符分隔):

15-Sep-18   TestColumn2 TestColumn3

BCP命令。

bcp "testDB.dbo.test_temptable" in  "c:\temp\test\testTempTable.txt" -c -t"\t" -T -S  "testSQlServer" -E -e c:\temp\test\error.csv

当我从表中删除[ID]列并运行时,一切正常。

我在做什么错?

编辑: 表没有标识列时分配的值

enter image description here

有用的链接:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-identity-values-when-bulk-importing-data-sql-server?view=sql-server-2017

What will be BCP format for inserting a identity column

1 个答案:

答案 0 :(得分:3)

问题是您试图将第一列(即日期)添加到INT列中。

您有三个选择...

  1. 将INT列作为第一行添加到源数据,并使其增加,就像IDENTITY将增加一样,并继续传递-E选项。这样做可以将源中的数据用作IDENTITY列。

  2. 向源数据的第一列添加一个随机INT,每行说1,然后请勿传递-E。根据文档,如果未提供-E,它将忽略身份列的值,并从当前的种子值开始并自动递增。

  3. 利用格式文件来指定数据文件中的哪些列进入SQL表中的哪些列。

How to specify the format file

How to construct a format file

祝你好运!