尝试在多个表中进行 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
)
整体流程非常简单
这让我发疯。它应该“正常工作”。我猜测 datetime2 字段有问题,但我无法想象它是什么。短暂性脑缺血发作。
我没有意识到的是,本机 BCP 文件对“NULL”和“NOT NULL”约束敏感,因此您将数据复制到的任何表也需要以这种方式匹配源。