Sql-Server

在處理源 LOB 列時避免“逐行”獲取方法

  • August 22, 2019

我有一個舊的 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。

顯然,這歸結為 SSIS 將任何大於 128 的 varchar 視為 NTEXT。不知道為什麼。但是,我可以進入 ODBC 源的高級屬性並將類型更改回類似 DT_WSTR 的類型。這似乎在大多數情況下都有效。

但是,我確實確定我正在處理的一些表實際上在它們的一些 TEXT 列中攜帶超過 4000 個字節,所以不幸的是我不得不將這些列保留為 DT_NTEXT 以防止截斷(SSIS 不會讓您設置了超過 4000 個字節的 DT_WSTR 類型)。我想在這些情況下,我只是堅持逐行獲取,但至少我能夠修復一些表。

引用自:https://dba.stackexchange.com/questions/102830