【问题标题】:BCP Import HelpBCP 导入帮助
【发布时间】:2011-01-21 14:37:56
【问题描述】:

我在使用 BCP 将制表符分隔的 *.txt 文件中的数据导入我的 SQL 表时遇到问题。

我不断收到两个“强制转换规范的字符值无效”错误。

作为测试,我手动插入了几行。然后我 BCP 将这些行查询到 *.txt 文件。然后我尝试 BCP 导入相同的数据。

通过该测试,我得到了“强制转换规范的字符值无效”错误和“BCP 数据文件中遇到意外的 EOF”

有什么方法可以判断哪些行/列触发了错误?

关于调试 BCP 的任何提示/建议?

    #@ Row 1, Column 2: Invalid character value for cast specification @#
1003    1/2/2011 23:59:00   Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com <NULL>  UPS GRD 42.650  AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1 AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Seal Style = , Attachment = NONE, Text Separator = NONE, Badge Comments = , badgeURL = http://www.blackinton.com/design-a-badge/data/pdf/vhbdab1291672350948.png, RESTXML = http://www.blackinton.com/design-a-badge/generate-xml.php?u=vhbdab1291672350948, Base Price = 59.00, Enamel = 0.00, Struck Solid = 0.00, Seal = 0.0  3271.8700   0.0000  0.0000  0.0000  3271.8700   1   Visa    <NULL>  0
1004    1/3/2011 23:59:00   Neeta   Garg    <NULL>  8888            WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg        8888            WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com     UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1    AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Sea
#@ Row 2, Column 2: Invalid character value for cast specification @#
1005    1/4/2011 23:59:00   Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com <NULL>  UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1A161BK;115.9900;1   AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Seal Style = , Attachment = NONE, Text Separator = NONE, Badge Comments = , badgeURL = http://www.blackinton.com/design-a-badge/data/pdf/vhbdab1291672350948.png, RESTXML = http://www.blackinton.com/design-a-badge/generate-xml.php?u=vhbdab1291672350948, Base Price = 59.00, Enamel = 0.00, Struck Solid = 0.00, Seal = 0.0  115.9900    8.0000  0.0000  0.0000  123.9900    1   Visa    <NULL>  0
1006    2011-01-05 11:27:50.617 Neeta   Garg    <NULL>  8888            WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg        8888            WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com     UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1A161BK;115.9900;1A161BK;115.9900;1  AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel

我发现,您不能 BCP 将日期导入为日期时间类型。因此,我将其导入到临时表中,其中类型为 varchar,然后我将选择我想要的表。但是,即使目标表的列类型为 varchar,我也会收到无效字符错误。

#@ Row 1, Column 2: Invalid character value for cast specification @#
1003    2011-01-21 12:30:10.917 Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com <NULL>  UPS GRD 42.650  AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1 AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Seal Style = , Attachment = NONE, Text Separator = NONE, Badge Comments = , badgeURL = http://www.blackinton.com/design-a-badge/data/pdf/vhbdab1291672350948.png, RESTXML = http://www.blackinton.com/design-a-badge/generate-xml.php?u=vhbdab1291672350948, Base Price = 59.00, Enamel = 0.00, Struck Solid = 0.00, Seal = 0.0  3271.8700   0.0000  0.0000  0.0000  3271.8700   1   Visa    <NULL>  0
1004    2011-01-21 12:30:10.917 Neeta   Garg    <NULL>  8888            WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg        8888            WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com     UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1    AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Sea
#@ Row 2, Column 2: Invalid character value for cast specification @#
1005    2011-01-21 12:30:10.917 Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg    <NULL>  8888    <NULL>  <NULL>  WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com <NULL>  UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1A161BK;115.9900;1   AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel 3 = , Panel 5 = , Panel 6 = , Seal Style = , Attachment = NONE, Text Separator = NONE, Badge Comments = , badgeURL = http://www.blackinton.com/design-a-badge/data/pdf/vhbdab1291672350948.png, RESTXML = http://www.blackinton.com/design-a-badge/generate-xml.php?u=vhbdab1291672350948, Base Price = 59.00, Enamel = 0.00, Struck Solid = 0.00, Seal = 0.0  115.9900    8.0000  0.0000  0.0000  123.9900    1   Visa    <NULL>  0
1006    2011-01-21 12:30:10.917 Neeta   Garg    <NULL>  8888            WESTBURY    NY  11594   US  ambulance   Yes Agency  92240099    000026  Neeta   Garg        8888            WESTBURY    NY  11594   US  2222222222  neeta@orderdynamics.com     UPS GRD 0.000   AXB479T;67.5900;2|842000YEL;4.2900;22|B956N;51.8900;1|XSPSPCL;67.0000;1890300;2999.9900;1|B956N;51.8900;1|XSPSPCL;210.0000;1|59047BKLG;9.9900;1A161BK;115.9900;1A161BK;115.9900;1A161BK;115.9900;1  AXB479T;|842000YEL;|B956N;Badge Custom Details :  Style = B956, Dimensions = 2  9/16\" x 2  9/16\", Enamel Type = regular, Font = block-black, Panel 2 = , Panel

【问题讨论】:

  • 顺便说一句...我没有任何身份字段或关键字段约束。
  • 我刚刚浏览并删除了 2 或 3 列中的数据,并尝试导入。我这样做了,直到我排除了所有的列。我仍然不断收到“强制转换规范的无效字符值”错误。
  • 将目标列类型更改为 varchar 有效。现在,我必须将该日期转换为导入所需的目标表。

标签: sql bcp


【解决方案1】:

我在这里阅读了这个链接http://luke.breuer.com/time/item/bcp_utility_gotchas/46.aspx

上面写着:

转换规范的字符值无效 bcp 尝试上传到列的值是错误的数据类型。在最简单的情况下,这是由于将非整数值上传到整数列、错误的日期格式等。但是,如果{数据文件中的列数}!= {目标表中的列数,也可能发生这种情况/格式化文件}。查看是否存在列 # 不匹配的一个好方法是错误文件是否吐出(您确实使用了 -e error.txt,对吗?)如下所示:

#@ 第 1 行,第 9 列:强制转换规范的字符值无效@# 2 0300 HC:36415 21 1 0 20070509 2 3 0300 HC:36415 21 1 0 20070608 2 #@ 第 2 行,第 9 列:强制转换规范的字符值无效@# 4 0301 HC:80076 366 1 0 20070509 2 5 0301 HC:80076 366 1 0 20070608 2

请注意,bcp 认为两行数据构成了要上传到数据库的一行。这 是因为 bcp 知道列分隔符是 {tab},除了最后一个,它是 {newline} — 如果它需要另一列,它会在 {newline} 之后读取。

还请检查日期格式是否正确写入。 http://support.microsoft.com/kb/883503

编辑 2 - 1241PST

假设您的数据库是 SQL Server,并且您尝试导入的列数据类型是日期时间,格式应如下所示:

2011-01-21 12:30:10.917

我想我曾经遇到过这个问题......

尝试将您的平面文件(带有制表符分隔的.txt)打开到 EXCEL,然后从那里选择列并更改格式。您可以通过转到 excel 中的数据选项卡,选择列,然后点击“文本到列”,选择分隔,然后完成。您的所有日期和时间都应该出现。

然后你必须再次选择列,右键单击,格式化单元格,并在类别列表中选择日期,并将格式更改为 SQL Server 预期的标准。如果这没有帮助,除了尝试通过使用您的表/数据库测试简单的小型测试用例来缩小问题范围之外,不知道还有什么办法。

【讨论】:

  • 我实际上并没有使用 -e error-file 命令。谢谢你的提示。它在这两种情况下都告诉我错误出现在日期字段中,但日期看起来是有效的。感谢您提供有关错误文件的提示!我刚刚完成了一个格式文件,用于导入。我要试一试。
  • 我已将错误文件输出添加到原始帖子中。任何想法为什么 1/2/2011 23:59:00 是“演员规范的无效字符值”?顺便说一句,我尝试了格式文件,但我没有在那里取得任何进展。
  • 关于 2011 年 1 月 2 日的问题,有一个 linkMicrosoft KB (#883503) 条目可能与此问题有关:_italic_This 行为发生在日期格式为包含破折号 (-) 字符,并且在月份或日期中有两个数字,但不是在两个数字中。例如,12-1-2004 和 1-12-2004 等日期会导致错误。但是,诸如 12-12-2004 之类的日期不会导致错误。
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多