我正在尝试通过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。
有线索吗?
3条答案
按热度按时间2eafrhcq1#
当FMT文件中的列与目标表/源表不匹配时,会出现此错误。我已创建了一个中间临时表来正确移动数据,这导致了此处的问题。通过获取中间临时表的fmt文件,已解决此问题。
koaltpgm2#
这里也一样。问题是DB上的列顺序与.fmt文件上的列顺序不匹配(特别是数据类型)。
对我来说,工作是按照与.fmt文件相同的顺序删除和创建表。我可以做一些事情,因为这是一个全新的表,没有数据,没有关系。
flseospp3#
这个错误也发生在我身上。列中没有不匹配,但我认为它是因为数据文件中的字段8和目标表中的列8的数据类型不匹配而引发的错误。
在我的例子中,我遇到了同样的问题,尽管源文件和目标文件的数据类型是相同的(在我的例子中是日期时间)。我尝试了格式化文件和所有的东西,但没有任何效果。
对我有效的一件事是使用下面的查询在staging中创建一个与我的目标表相同的空表。
然后使用insert query将数据插入到空表中,然后您可以轻松地使用BCP将数据查询出来并放入目标表中,没有任何问题。