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 に変更しようとすると、バイトストリームに戻り続けます