SQL BCP无法为标识列插入值

问题描述 投票:2回答:1

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

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

第二列是日期时间。当我使用-E标志(如许多建议),我得到错误

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

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

这是一个repro:

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 - TAB DELIMITED):

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

sql sql-server bcp
1个回答
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

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.