QA@IT

SSIS 2008 [参照]コンポーネントのパラメータ

4379 PV

SSIS 2008の参照コンポーネントに関する質問です。

[環境]

WindowsServer2003(Standard x64 Edition)
Microsoft Visual Studio 2008 R2
(Microsoft SQL Server Management Studio : 10.50.1600.1)
SSIS 2008
(Microsoft Visual Studio 2008 : Version 9.0.30729.4462 QFE
Microsoft .NET Framework    : Version 3.5 SP1)
プロジェクトは、32bitのSSISランタイム

sqlserverのデータを参照して、oracleデータをsqlserverへ移行するフローを考えております。

まず「ADO.NET 変換元」でsqlserverのデータ[sbn_code]をSELECTし、
それを参照して、紐づくoracleデータ[st_data1等]を移行したいです。

そこで、データフロー内で「参照」コンポーネントを用いて、
[sbn_code]をパラメータとし、部分キャッシュによる方法を考えております。
しかし、「参照」コンポーネント内「詳細設定」のカスタムクエリに、
以下のSQL文を書き「パラメーター」ボタンを押下後、エラーが出てしまいます。

どなたか解決方法をご教授頂けますでしょうか。

  • カスタムクエリのSQL文⇒

SELECT st_table.st_code,
st_table.st_data1,
st_table.st_data2
FROM  st_table
WHERE  st_table.st_code = ?

-「パラメーター」押下後のエラー⇒

System.Runtime.InteropServices.COMException (0x80040E51):
 プロバイダがパラメータ情報を得られず SetParameterInfo が呼び出されていません。
  場所 Microsoft.DataTransformationServices.Design.UnsafeNativeMethods.ICommandWith
 Parameters.GetParameterInfo(IntPtr& pcParams, IntPtr& prgParamInfo,IntPtr& ppNamesBuffer)
  場所 Microsoft.DataTransformationServices.Design.DesignUtils.
 GetQueryParameters(ConnectionManager connectionManager, String sqlStatement)
  場所 Microsoft.DataTransformationServices.DataFlowUI.LookupAdvancedPage
.buttonParam_Click(Object sender, EventArgs e)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • 「ADO.NET 変換元」内のSQL⇒

    SELECT sbn_table.sbn_code
    FROM  sbn_table

  • フロー作成時の警告(1箇所)⇒

    [参照[16]]警告:OLE DBプロバイダーから列コードページ情報を取得できません。
    コンポーネントで"DefaultCodePage"プロパティがサポートされている場合は、そのプロパティの
    コードページを使用します。
    現在の文字列のコードページの値が正しくない場合は、プロパティの値を変更してください。
    コンポーネントでこのプロパティがサポートされていない場合は、コンポーネントのロケールIDの
    コードページを使用します。

  • デバッグ後のエラー(3箇所)⇒

    [参照[16]]エラー:SSISエラーコードDTS_E_OLEDBERROR。OLE DBエラーが発生しました。
    エラーコード:0x80040E5D。
    OLE DBレコードを使用できます。ソース:"Microsoft OLE DB Provider for Oracle" Hresult:0x80040E5D
    説明:"パラメータ名は認識されていません。"。
    [参照[16]]エラー:パラメーターのバインド中にOLE DBエラーが発生しました。
    SQLCommandプロパティおよびSqlCommandParamプロパティを確認してください。
    [SSIS.Pipeline]エラー:コンポーネント"参照"(16)が実行前フェーズに失敗し、エラーコード
    0xC020824Fが返されました。

※ちなみに、同じデータを用いてフルキャッシュで行った場合、正しくデータが移行されます。(警告は出ます。)
 しかし、この手法だと実行時間が長いため、要件を満たすことができません。
※また今回の現象を、SQLserver2012,SSIS2012の環境でも試しましたが、同じ箇所でエラーが発生しました。

※データフロータスク
_____________
│ ADO NET 変換元 │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

_____________
│   データ変換  │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ↓
_____________
│    参照    │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ↓ 参照の一致出力
_____________
│ SQL Server 変換先 │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※「参照」コンポーネント内の「列」
[使用できる入力列]

____________

│  sbn_code    │ [使用できる参照列]
―――――――――――― ____________
│  sbn_code_copy  │━━━━━━━━━━━│  st_code   │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄      ――――――――――――
│  st_data1   │
――――――――――――
│  st_data2   │
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

どうぞ宜しくお願い致します。

回答

ちょっと2008の環境がないのですぐに回答できないですが、
パラメータのバインド方法がいくつかあった気がしますので変更するとうまくいくかもしれません。

あとSQLServerとOracleのバージョンはいくつでしょうか

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。