windows 在SQL Server中通过bcp命令导入表数据时出错

wwodge7n  于 2023-02-05  发布在  Windows
关注(0)|答案(3)|浏览(362)

我正在尝试通过bcp命令行实用工具将数据导入表中。之前我遇到的错误是右截断,我将两个表中的数据类型更改为nvarchar,并使用-n开关运行FMT命令,现在错误似乎已更改,但仍然无法导入数据。
用于导入的命令如下所示:

bcp ABC.ABC.DIM_Sales_Channel in C:\temp\datafile\DIM_Sales_Channel.dat -f C:\temp\formatcorrected\DIM_Sales_Channel.fmt -T

显示的错误如下所示:

[Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion not allowed from the given field type 0x38 for field 8 to column 8.



11.0
9
1       SQLINT              0       4       ""   1     Sales_Channel_SK                               ""
2       SQLINT              0       4       ""   2     Sales_Channel_ID                               ""
3       SQLNCHAR            2       36      ""   3     Sales_Channel_Code                             Latin1_General_CI_AI
4       SQLNCHAR            2       36      ""   4     Sales_Channel_Level_1                          Latin1_General_CI_AI
5       SQLNCHAR            2       36      ""   5     Sales_Channel_Level_2                          Latin1_General_CI_AI
6       SQLDATETIME         1       8       ""   6     Inserted_Date                                  ""
7       SQLDATETIME         1       8       ""   7     Modified_Date                                  ""
8       SQLINT              1       4       ""   8     batchno                                        ""
9       SQLINT              1       4       ""   9     Status                                         ""

[Microsoft][SQL Server Native Client 11.0][SQL Server]不允许将字段8的给定字段类型0x 38转换为列8。
有线索吗?

2eafrhcq

2eafrhcq1#

当FMT文件中的列与目标表/源表不匹配时,会出现此错误。我已创建了一个中间临时表来正确移动数据,这导致了此处的问题。通过获取中间临时表的fmt文件,已解决此问题。

koaltpgm

koaltpgm2#

这里也一样。问题是DB上的列顺序与.fmt文件上的列顺序不匹配(特别是数据类型)。
对我来说,工作是按照与.fmt文件相同的顺序删除和创建表。我可以做一些事情,因为这是一个全新的表,没有数据,没有关系。

flseospp

flseospp3#

这个错误也发生在我身上。列中没有不匹配,但我认为它是因为数据文件中的字段8和目标表中的列8的数据类型不匹配而引发的错误。
在我的例子中,我遇到了同样的问题,尽管源文件和目标文件的数据类型是相同的(在我的例子中是日期时间)。我尝试了格式化文件和所有的东西,但没有任何效果。
对我有效的一件事是使用下面的查询在staging中创建一个与我的目标表相同的空表。

SELECT * INTO schema.newtable FROM schema.oldtable WHERE 1 = 0;

然后使用insert query将数据插入到空表中,然后您可以轻松地使用BCP将数据查询出来并放入目标表中,没有任何问题。

相关问题