web-dev-qa-db-ja.com

SQLへのSSISアクセス。バインドエラー:バインドステータスは「DT_NTEXT」でした

以前の同僚から継承した[〜#〜] ssis [〜#〜]パッケージを実行しようとしています。パッケージはAccessデータベースからプルし、データを[〜#〜] sql [〜#〜]データベースに配置します。

フィールドの1つで、「推奨事項」と呼びましょう。Accessデータベースのタイプは「メモ」です。 SQL出力データベースの列のタイプはvarchar(max)

エラー:0xC002F446 at Data Flow Task、OLE DB Destination [218]: "Recommendations"列のバインディングの設定中にエラーが発生しました。バインディングステータスは "DT_NTEXT"でした。データフロー列タイプは「DBBINDSTATUS_UNSUPPORTEDCONVERSION」です。OLE DBタイプの "DBTYPE_IUNKNOWN"から宛先列タイプの "DBTYPE_WVARCHAR"への変換は、このプロバイダーではサポートされていない可能性があります。

さらに私を混乱させたのは、タイプmemoの別の列であり、これもDT_NTEXTとして処理され、varchar(max)に配置されます。 = SQLデータベースのデータ型。エラーメッセージをスローしません。多数の変換オブジェクトタイプを試しましたが、まだパッケージを正常に実行できていません。

8
CAJE

次の手順を実行することで、このエラーを再現できました。

  • 宛先列のデータ型をnvarchar(100)に変更します
  • データフローからの受信行をntextにし、長さを_100_より大きくします。

これにより、宛先列がオーバーフローし、問題で述べたエラーがスローされます。

_Error: 0xC002F446 at Data Flow Task, OLE DB Destination [2]: An error occurred while setting up a 
binding for the "myCol" column. The binding status was "DT_NTEXT". The data flow column type is 
"DBBINDSTATUS_UNSUPPORTEDCONVERSION". The conversion from the OLE DB type of "DBTYPE_IUNKNOWN" to  
the destination column type of "DBTYPE_WVARCHAR" might not be supported by this provider.
_

つまり、ntext列の値がnvarchar(max)を超えているため、オーバーフローが発生していると思います。

列をdt_wstr(510)に変換する以前のバージョンでは、これは、おそらくntext値を宛先列に収まるサイズに切り捨てているために機能します。値が実際にそのサイズに収まる場合は、それを解決策として使用してください。ソース値が大きくなる可能性がある場合は、SQLの宛先列を適切なものに変更してください。これはntextにすることができますが、非推奨になっているため、これをvarbinary(max)に変更することをお勧めします。

14
  1. SQL nvarchar(100)でデータ型を変更します
  2. 派生列を使用して、メモをユニコードに変換する式を記述します(DT_WSTR、4000)((DT_NTEXT)message)

enter image description here

  1. 新しい派生列名のマップ

enter image description here

3
atik sarker

この問題は、データの '(アポストロフィ)が原因です。アポストロフィの例があるレコードを削除します:コミュニティの代わりにタイプコミュニティ

0
bajivali shaik