首页 > 解决方案 > BCP 错误 使用本机方法的数据类型的字段大小无效

问题描述

尝试在多个表中进行 BCP 时,我不断收到“数据类型的字段大小无效”错误。尽管我使用的是本机 (Unicode) 模式,并且我绝对确定表定义匹配,因为目标是在我尝试导入之前从源的 DACPAC 创建的。有些表可以工作,但大多数都因错误而失败。我也尝试过使用格式文件,但这也无济于事。我已经阅读了我可以在 SO 上找到的所有文档和所有与 BCP 相关的问题。有任何想法吗?

这是我的导出命令。$query_array 只是“Select * From $tbl”与“Select * From $tbl Where some date filter ”混合的字典:

&bcp $query_array[$tbl] QueryOut "Data\$tbl.dat" -N -S $SqlAddress -d $SqlDB -T;

这是导入:

&bcp $tgtTable in "Data\$tbl.dat" -N -S $SqlAddress -d $SqlDB -E -T -ErrorAction Stop;

失败的表之一如下所示:

CREATE TABLE [Foo].[Bar](
    [Blah1] [numeric](38, 0) NOT NULL,
    [Blah2] [numeric](38, 0) NULL,
    [Blah3] [numeric](38, 0) NULL,
    [Blah4] [numeric](38, 0) NULL,
    [Blah5] [datetime2](7) NULL,
    [Blah6] [varchar](30) NULL,
    [Blah7] [datetime2](7) NULL,
 CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED 
(
    [Blah1] ASC
)

整个过程非常简单

  1. 从源代码生成 DACPAC
  2. 使用 Unicode Native 中的 BCP 将每个表导出到 dat 文件
  3. 从 DACPAC 创建目标数据库
  4. 使用 Unicode Native 格式的 BCP 从 dat 文件导入每个表

这真让我抓狂。它应该可以正常工作。我猜 datetime2 字段有问题,但我无法想象它是什么。TIA。

标签: sql-serverbcp

解决方案


推荐阅读