BCP 错误使用本机方法的数据类型的字段大小无效

问题描述 投票:0回答:1

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

这是我的导出命令。 $query_array 只是“Select * From $tbl”与“Select * From $tblWhere 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 字段有问题,但我无法想象它是什么。短暂性脑缺血发作。

sql-server bcp
1个回答
0
投票

我没有意识到的是,本机 BCP 文件对“NULL”和“NOT NULL”约束敏感,因此您将数据复制到的任何表也需要以这种方式匹配源。

© www.soinside.com 2019 - 2024. All rights reserved.