5

これは元のクエリであり、ado.netソースを使用し、ソース内で指定された .net providers\odbc データ プロバイダーを使用して正常に動作します。

SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT   
FROM  gyv2M.DDM_ACCT_STRUC a   
INNER JOIN  
(SELECT max(DDM_ACCT_STRUC_TP) as   DDM_ACCT_STRUC_TP, FA_CLNT_ID 
 FROM gyv2M.DDM_ACCT_STRUC  
 WHERE FA_DM_ROW_DT <= '6/30/2011' AND DM_ROW_E_DT <= '6/30/2011'
 GROUP BY  FA_CLNT_ID) b 
 ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '6/30/2011' AND a.DM_ROW_E_DT <= '6/30/2011'

しかし、SQLサーバーのテーブルから値を取得するDATEのために自動化する必要があります。その日付値を格納する変数を作成しましたが、その変数をパラメーターとして使用して上記のクエリに渡したいと思います。残念ながら、ado.net ソースの変数から data access mode : sql コマンドが見つかりませんでした。他のサイトを検索したところ、式ビルダーを使用して式を使用できることがわかりました。プロパティをクリックしてください..>式..>など..式が正常に評価されました。式は以下のようになりますが、そこで打たれました。次は何ですか ?評価された式を ado.net source のソース コマンドとして渡すにはどうすればよいですか? 助けてください。

SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT   
FROM  gyv2M.DDM_ACCT_STRUC a   
INNER JOIN  
(SELECT max(DDM_ACCT_STRUC_TP) as   DDM_ACCT_STRUC_TP, FA_CLNT_ID 
 FROM gyv2M.DDM_ACCT_STRUC  
 WHERE FA_DM_ROW_DT <=  '@[User::RepDate]'  AND DM_ROW_E_DT <=  '@[User::RepDate]'
 GROUP BY  FA_CLNT_ID) b 
 ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <=  '@[User::RepDate]'  AND a.DM_ROW_E_DT <=  '@[User::RepDate]'

アップデート

やあ、

ご回答ありがとうございました。あなたが指定したように、ユーザー変数user:RepDateをdatetimeで作成し、datetimeをその変数RepDateに割り当てるSQL実行タスクを作成しました。また、はい、式を評価でき、ado.net ソース SQL コマンド モードで作成されたクエリを確認できました。クエリは次のとおりです。

SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT   
FROM  gyv2M.DDM_ACCT_STRUC a   
INNER JOIN  
(SELECT max(DDM_ACCT_STRUC_TP) as   DDM_ACCT_STRUC_TP, FA_CLNT_ID 
 FROM gyv2M.DDM_ACCT_STRUC  
 WHERE FA_DM_ROW_DT <= @[User::RepDate]  AND DM_ROW_E_DT <=  @[User::RepDate] 
 GROUP BY  FA_CLNT_ID) b 
 ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <=  @[User::RepDate] AND a.DM_ROW_E_DT <=  @[User::RepDate]

しかし、以下のエラーが表示されます。元のクエリで指定したように、内側のクエリが日付形式「mm/dd/yyyy」を想定しているためだと思いますが、ユーザー変数から日時を提供しています。組み込み関数を使用して、ユーザー変数の日時形式を指定された形式に変換する方法を教えてください。DT_DAte を試しましたが、うまくいきませんでした。

Error at Data Flow Task 4 [ADO NET Source [1]]: The component "ADO NET Source" (1) was unable to retrieve column information for the SQL command. The following error occurred: ERROR [42601] [IBM][CLI Driver][DB2] SQL0104N  An unexpected token "[" was found following "".  Expected tokens may include:  "CONCAT || / MICROSECONDS MICROSECOND SECONDS SECOND MINUTES".  SQLSTATE=42601
ADDITIONAL INFORMATION:

Pipeline component has returned HRESULT error code 0xC02020FF from a method call. (Microsoft.SqlServer.DTSPipelineWrap)
BUTTONS:
OK

***アップデート2***

タイトル: Microsoft Visual Studio

データ フロー タスク [ADO NET ソース [1]] でのエラー: コンポーネント "ADO NET ソース" (1) は、SQL コマンドの列情報を取得できませんでした。次のエラーが発生しました: エラー [22007] [IBM][CLI ドライバー][DB2] SQL0180N 日時値のストリング表現の構文が正しくありません。SQLSTATE=22007


追加情報:

パイプライン コンポーネントは、メソッド呼び出しから HRESULT エラー コード 0xC02020FF を返しました。(Microsoft.SqlServer.DTSPipelineWrap)


ボタン:

わかった

4

2 に答える 2

8

次の手順を使用できます。

  1. 作業クエリを ADO.NET ソースに使用します。[ADO.NET ソースのパラメーターをマップできませんでした]
  2. を選択してDataflowをクリックしますProperties
  3. プロパティ ペインで、"Expressions" という名前のプロパティを探します。それを展開し、[...] アイコンをクリックして、プロパティ式エディターを開きます (下のスクリーンショット)。データ ソースのプロパティSqlCommandを選択し、式ビルダーを使用して、SSIS 変数 (この場合は datetime 変数) を使用してクエリを準備します。

ADO.NET クエリの準備

式ビルダーでこれを試してください。変数は文字列でなければならないことに注意してください。そうでない場合は、使用(DT_WSTR,30)してキャストします。日付を使用しているため、SQL は文字列形式の日付を処理する必要があります。つまりto_date()、Oracle で使用します。

 "SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT   
FROM  gyv2M.DDM_ACCT_STRUC a   
INNER JOIN  
(SELECT max(DDM_ACCT_STRUC_TP) as   DDM_ACCT_STRUC_TP, FA_CLNT_ID 
 FROM gyv2M.DDM_ACCT_STRUC 
WHERE FA_DM_ROW_DT <= '"+ (DT_WSTR,30)@[User::RepDate] +"'  AND DM_ROW_E_DT <= '"+ (DT_WSTR,30)@[User::RepDate] +"' 
 GROUP BY  FA_CLNT_ID) b 
 ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '" +(DT_WSTR,30)@[User::RepDate] +"' AND a.DM_ROW_E_DT <='"+(DT_WSTR,30)@[User::RepDate]+"'"

お役に立てれば!

于 2012-11-09T05:49:26.847 に答える
0

式ビルダーでこれを試してください。

 "SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT   
FROM  gyv2M.DDM_ACCT_STRUC a   
INNER JOIN  
(SELECT max(DDM_ACCT_STRUC_TP) as   DDM_ACCT_STRUC_TP, FA_CLNT_ID 
 FROM gyv2M.DDM_ACCT_STRUC 
WHERE FA_DM_ROW_DT <= '"+ (DT_WSTR,30)@[User::RepDate] +"'  AND DM_ROW_E_DT <= '"+ (DT_WSTR,30)@[User::RepDate] +"' 
 GROUP BY  FA_CLNT_ID) b 
 ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '" +(DT_WSTR,30)@[User::RepDate] +"' AND a.DM_ROW_E_DT <='"+(DT_WSTR,30)@[User::RepDate]+"'"

これがうまくいくことを願っています!

于 2012-11-14T07:43:36.977 に答える