处理源 LOB 列时避免“逐行”获取方法

Chr*_*att 12 postgresql sql-server migration odbc ssis

我有一个旧的 PostgreSQL 数据库源 (ODBC),我正在尝试使用 SSIS 将其迁移到新的 SQL Server 架构。我收到警告说:

强制执行“逐行”提取方法,因为该表具有 LOB 列。列内容为 LOB

问题是,没有一个列真的需要是 LOB。有一些是 TEXT 类型,但可以很容易地放在 varchar(max) 中。更奇怪的是,大多数已经varchars,但似乎 varchar(128) 上的任何内容都被视为 LOB(预先属性,数据类型为 DT_NTEXT)。

我尝试执行手动 SQL 命令,其中我在 select 语句中将每个字符串类型显式转换为适当长度的 varchar,并且它们仍然在 ODBC 源中设置为 DT_NTEXT。

我不是 DBA,所以我完全有可能在做一些非常愚蠢的事情。我只想知道确保类型最终成为 varchars 的最佳方法,以便我可以批量获取。有任何想法吗?

以防万一,我在 Visual Studio 2013 中使用 SSIS-BI 2014。

Chr*_*att 4

显然,这归结为 SSIS 将任何大于 128 的 varchar 视为 NTEXT。不知道为什么。不过,我可以进入 ODBC 源的高级属性并将类型更改回 DT_WSTR 之类的类型。这似乎在大多数情况下都有效。

然而,我确实确定我正在处理的一些表的某些 TEXT 列中实际上携带了 4000 个字节以上,因此不幸的是,我必须将这些列保留为 DT_NTEXT 以防止截断(SSIS 不会让您设置了超过 4000 字节的 DT_WSTR 类型)。我想在这些情况下,我只是坚持逐行获取,但至少我能够修复一些表。