SQL BCP无法插入标识列的值

SQL BCP无法插入标识列的值,sql,sql-server,bcp,Sql,Sql Server,Bcp,我正在使用导入以制表符分隔的文件。我的表有一个标识列,当我运行bcp命令时,得到的错误是 错误=[Microsoft][SQL Server本机客户端11.0]无效的日期格式 第二列是datetime。当我使用-E标志(正如许多人建议的那样)时,我得到的错误如下 错误=[Microsoft][SQL Server本机客户端11.0]转换规范的字符值无效 当我没有身份栏时,一切都正常。我不知道这里少了什么 这是一份复印件: CREATE TABLE [dbo].[test_temptable] (

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

错误=[Microsoft][SQL Server本机客户端11.0]无效的日期格式

第二列是datetime。当我使用
-E
标志(正如许多人建议的那样)时,我得到的错误如下

错误=[Microsoft][SQL Server本机客户端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
测试数据(testtentable.txt-制表符分隔):

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]
列并运行时,一切正常

我做错了什么

编辑: 表没有标识列时指定的值

有用链接:


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

你有三个选择

  • 将INT列作为第一行添加到源数据中,并将其递增,就像标识递增一样,并继续传递-E选项。这样做将允许将源中的数据用作标识列

  • 在源数据的第一列中添加一个随机整数,比如每行1,然后不要传递-E。根据文档,如果不提供-E,它将忽略标识列的值,并从当前种子值和自动增量开始

  • 利用格式文件指定数据文件中的哪些列进入SQL表中的哪些列


  • 祝你好运

    插入不带标识列的行时,分配给它的值是多少?您确定它不是自动递增列吗?在这种情况下,您不需要显式指定该值应该是什么。。DB会帮你做的。我已经添加了表,以及它的值在没有标识列时的外观。此外,它是一个自动递增列,但BCP无法检测,或者我做错了什么。稍后可能为true:)使用-f参数指定格式文件。格式化文件将从csv映射到表。或者,导入一个没有ID列的临时表,然后运行一个查询,将数据从临时表复制到测试表。谢谢。但为什么在运行BCP命令时BCP无法填充[ID]列。它是否应该插入ID列递增的行?谢谢。我将尝试这些选项。为了避免使用格式化文件(我发现这是一个痛苦的过程),您可以创建一个与表完全相同的视图,然后插入到该视图中。。。抱歉,看起来和你的文件一模一样
    bcp "testDB.dbo.test_temptable" in  "c:\temp\test\testTempTable.txt" -c -t"\t" -T -S  "testSQlServer" -E -e c:\temp\test\error.csv