2

SSIS パッケージを使用してフラット ファイルから SQL 2005 データベースにデータをインポートしようとしています。

データベースには、いくつかの関連情報を保持するために使用する CLR User-Defined Type があります。これを dbo.CustomType と呼びましょう。

SQL で dbo.CustomType のオブジェクトを作成するには、次のようにします。

DECLARE @Decimal1   DECIMAL(18,6),
        @Int1       INT,
        @Decimal2   DECIMAL(18,6),
        @Int2       INT,
        @Decimal3   DECIMAL(18,6)


SELECT  @Decimal1   = 1.5,
        @Int1       = 1,
        @Decimal2   = 2.5,
        @Int2       = 2,
        @Decimal3   = 3



SELECT 
    CONVERT(
                dbo.CustomType,
                CONVERT(VARCHAR(20), @Decimal1) + ';' + 
                CONVERT(VARCHAR(20), @Decimal2) + ':' +
                CONVERT(VARCHAR(2), @Int1) + ';' +
                CONVERT(VARCHAR(20), @Decimal3) + ':' +
                CONVERT(VARCHAR(2),  @Int2)
            )

SSIS には、すべての列が変数によって表現されるデータセットがありますが、それらを組み合わせて dbo.CustomType に変換するにはどうすればよいですか?

====

アップデート:

OLE DB Destination の代わりに OLE DB コマンド オブジェクト内で挿入ステートメントを使用すると、カスタム型を挿入できました。

それで:

INSERT INTO Greg
VALUES (CONVERT(dbo.CustomType, '1;1:1;1:1;'))

動作しますが、

INSERT INTO Greg
VALUES (Convert(dbo.Customtype, ?))

エラーを与える

[OLE DB コマンド [3103]] エラー: SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x80040E21。OLE DB レコードが利用可能です。ソース: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E21 説明: "キャスト仕様の無効な文字値".

文字列列をバイトストリームに変換しようとしているようですが、高度なエディターで Param_0 を String に変更しようとすると、バイトストリームに戻り続けます

4

1 に答える 1

2

次の 2 つの手順で試すことができます。

  1. データ フロー タスクで、このデータをスタギング テーブルに挿入して列を分離し、
  2. 次に、SQLタスクの実行で、変換を使用してスタギングテーブルから宛先にデータを挿入します

例:

insert into DestinationTable
select convert(dbo.Customtype, DecimalColumn1, DecimalColumn2, IntColumn1, DecimalColumn3, IntColumn2)
from StaggingTable
于 2012-08-31T09:57:13.137 に答える