SQL BCP 无法为标识列插入值
SQL BCP Unable to insert value for identity column
我正在使用 bcp utility 导入制表符分隔文件。我的 table 有一个标识列,当我使用 运行 bcp 命令时,我得到错误 as
Error = [Microsoft][SQL Server Native Client 11.0] Invalid date format
第二列是日期时间。当我使用 -E
标志时(正如许多人所建议的那样),我得到错误
Error = [Microsoft][SQL Server Native Client 11.0] Invalid character value for cast specification
当我没有标识列时一切正常。我不确定这里缺少什么。
这是一个重现:
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
当我从 table 和 运行 中删除 [ID]
列时,一切正常。
我做错了什么?
编辑:
当 table 没有标识列
时分配的值
有用的链接:
What will be BCP format for inserting a identity column
问题是您正在尝试将第一列(日期)添加到 INT 列中。
你有三个选择...
将 INT 列作为第一行添加到源数据中,并使其递增,就像 IDENTITY 递增一样,并继续传递 -E 选项。这样做将允许将源中的数据用作 IDENTITY 列。
将随机 INT 添加到源数据的第一列,假设每行 1,然后 不要 传入 -E。根据文档,当未提供 -E 时,它将忽略标识列的值并从当前种子值开始并自动递增。
利用格式文件指定数据文件中的哪些列进入我们 SQL table.
中的哪些列
How to specify the format file
How to construct a format file
祝你好运!
您可以在 XML 中创建文件格式并跳过标识列。但是标识栏一定是最后一个.
来自微软网站:
对于 XML 格式文件,当您使用 bcp 命令或 BULK INSERT 语句直接导入到 table 时不能跳过列。 但是,您可以导入 table 的最后一列以外的所有内容。如果您必须跳过最后一列以外的任何列,则必须创建一个目标视图 table,该视图仅包含数据文件中包含的列。
我正在使用 bcp utility 导入制表符分隔文件。我的 table 有一个标识列,当我使用 运行 bcp 命令时,我得到错误 as
Error = [Microsoft][SQL Server Native Client 11.0] Invalid date format
第二列是日期时间。当我使用 -E
标志时(正如许多人所建议的那样),我得到错误
Error = [Microsoft][SQL Server Native Client 11.0] Invalid character value for cast specification
当我没有标识列时一切正常。我不确定这里缺少什么。
这是一个重现:
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
当我从 table 和 运行 中删除 [ID]
列时,一切正常。
我做错了什么?
编辑: 当 table 没有标识列
时分配的值有用的链接:
What will be BCP format for inserting a identity column
问题是您正在尝试将第一列(日期)添加到 INT 列中。
你有三个选择...
将 INT 列作为第一行添加到源数据中,并使其递增,就像 IDENTITY 递增一样,并继续传递 -E 选项。这样做将允许将源中的数据用作 IDENTITY 列。
将随机 INT 添加到源数据的第一列,假设每行 1,然后 不要 传入 -E。根据文档,当未提供 -E 时,它将忽略标识列的值并从当前种子值开始并自动递增。
利用格式文件指定数据文件中的哪些列进入我们 SQL table.
中的哪些列
How to specify the format file
How to construct a format file
祝你好运!
您可以在 XML 中创建文件格式并跳过标识列。但是标识栏一定是最后一个.
来自微软网站:
对于 XML 格式文件,当您使用 bcp 命令或 BULK INSERT 语句直接导入到 table 时不能跳过列。 但是,您可以导入 table 的最后一列以外的所有内容。如果您必须跳过最后一列以外的任何列,则必须创建一个目标视图 table,该视图仅包含数据文件中包含的列。