1

私はピボットしている次のテーブルを持っています:

(ID、名前、値)

1、「タスク ID」、123

1、「言語」、「Java」

2、「タスク ID」、456

PivotKey を Name 列に設定し、Pivo​​tedValue を Value 列に設定しました。新しい列 (タスク ID と言語) ごとに、Pivo​​tKeyValue をそれぞれ「タスク ID」と「言語」に設定しました。私のパッケージは上記のデータで正常に動作します。ピボット操作の結果は次のとおりです。

(ID、タスク ID、言語)

1、123、「ジャバ」

2、456、ヌル

ただし、次のソース データでパッケージを実行すると、問題が発生します。

(ID、名前、値)

1、ヌル、ヌル

2、ヌル、ヌル

私が得るエラーメッセージは次のとおりです。

[ピボット [4511]] エラー: ピボット キーの値 "(文字列に変換できません)" が無効です。[DTS.Pipeline] エラー: SSIS エラー コード DTS_E_PROCESSINPUTFAILED。コンポーネント "Pivot" (4511) の ProcessInput メソッドがエラー コード 0xC0202090 で失敗しました。識別されたコンポーネントが ProcessInput メソッドからエラーを返しました。エラーはコンポーネントに固有のものですが、エラーは致命的であり、データ フロー タスクの実行が停止します。これより前に、障害に関する詳細情報を含むエラー メッセージが投稿される場合があります。

値を処理するように構成されていないため、ピボット操作が PivotKey 列 'Name' の NULL 値を処理できないことを意味していると思います。問題は、これを行う方法がわからないことです。出力列 (「入力および出力プロパティ」フォーム) の PivotKeyValue プロパティの NULL 値をどのように検出して処理しますか?

御時間ありがとうございます。

4

2 に答える 2

2

テーブルまたは結果セットの列名を NULL に設定できないため、NULL が問題を引き起こしています。PIVOT 演算子はこれを実行しようとしています。事前にピボットされた (またはピボットされていない) データに対して ISNULL 演算子を使用する必要があります。

無効です (、

通常は ISNULL(value, 0) のようにします。

于 2009-01-12T04:37:58.793 に答える
0

次のスクリプトを使用して、最初の位置を再現できます。

CREATE TABLE DataTable(ID INT、名前 Nvarchar(40)、値 Nvarchar(40))

INSERT DataTable VALUES(1, 'TaskID' , '123') INSERT DataTable VALUES(1, 'Language', 'Java') INSERT DataTable VALUES(2, 'TaskID', '456')

SELECT id,[タスクID],[言語] FROM ( SELECT ID,[名前],[値] FROM DataTable ) AS s PIVOT (MAX(値) FOR [名前] IN ([タスクID],[言語])) AS p

DROP TABLE データテーブル

結果:

id TaskID 言語 1 123 Java 2 456 NULL

しかし、私が実行すると:

CREATE TABLE DataTable(ID INT、名前 Nvarchar(40)、値 Nvarchar(40))

INSERT DataTable VALUES(1,NULL,NULL) INSERT DataTable VALUES(2,NULL,NULL)

SELECT id,[タスクID],[言語] FROM ( SELECT ID,[名前],[値] FROM DataTable ) AS s PIVOT (MAX(値) FOR [名前] IN ([タスクID],[言語])) AS p

DROP TABLE データテーブル

結果:

id TaskID 言語 1 NULL NULL 2 NULL NULL

これはうまく実行されます。

私はあなたがしていることを見逃しているに違いないと思いますか?

于 2009-02-24T17:45:13.100 に答える