29

パッケージの実行中に以下のメッセージが表示されます。

テキストが切り捨てられたか、1 つ以上の文字がターゲット コード ページで一致しませんでした。

task_teammemberデータ型が のフィールド名を持つ SQL テーブルからデータを取得していますVARCHAR(MAX)。パッケージの実行はソースで失敗します。エラーメッセージなしでパッケージを実行する列を型キャストしtask_teammberました。VARCHAR(8000)ただし、ソース テーブルには8000文字を超える文字があるのに対し、宛先は8000文字しか受信しません。

列が として定義されている場合、SSIS を使用してソース テーブルから宛先テーブルにすべてのデータを転送するにはどうすればよいVARCHAR(MAX)ですか?

4

1 に答える 1

48

text stream [DT_TEXT]データ型の SQL Server テーブル列からデータを取得するには、SSIS データ型を使用する必要があります。varchar(MAX)

SSIS がソースからデータ型を自動的に推測する方法を示す簡単な例を次に示します。この例では、SQL Server 2008 R2 データベースと SSIS 2008 R2 を使用しています。

SQL Server データベースに次のテーブルを作成してソース テキストを格納し、宛先を使用して SSIS パッケージを使用してテキストを挿入します。

CREATE TABLE [dbo].[SourceTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [SourceText] [varchar](max) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[DestinationTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DestinationText] [varchar](max) NOT NULL
) ON [PRIMARY]

ソース テーブルに長いテキストを挿入します。パッケージを実行する前に、ソース テーブルに 10,000 文字を超えるデータが含まれており、宛先テーブルが空であることがわかります。

前

データベースへの接続マネージャーを含む SSIS パッケージを作成します。制御フロー タスクにデータ フロー タスクを配置します。dbo.SourceTableデータ フロー タスク内に、OLE DB ソースと OLE DB 宛先を配置して、データを からに転送しますdbo.DestinationTable。ここで、スクリーンショットはパッケージの実行ステータスを示しています。

実行

クエリを再度実行すると、切り捨てエラーなしで、SSIS パッケージを使用してソース テーブルからのテキストが宛先テーブルに取り込まれていることがわかります。

後

パッケージのデータ フロー タスク タブに戻り、右クリックしてOLE DB SourceからShow Advanced Editor...

高度なエディター

Advanced Editor for OLE DB Source、[入力および出力プロパティ]タブをクリックします。を展開External Columnsして選択しますSourceText。ソース テーブルで定義されstream [DT_TEXT]たデータ型に基づいて、SSIS が列のデータ型をテキストに設定していることがわかります。VARCHAR(MAX)

データ・タイプ

SSIS での SQL Server データ型 VARCHAR(MAX) および NVARCHAR(MAX) のマッピングを次に示します。

VARCHAR(MAX) ---> テキスト ストリーム [DT_TEXT]

NVARCHAR(MAX) ---> Unicode テキスト ストリーム [DT_NTEXT]

詳細については、MSDN Integration Services のデータ型を参照してください。

それが役立つことを願っています。

于 2013-02-05T11:08:00.037 に答える