SQL文へ引数を動的に渡したい

社員IDをExcelファイルに設定し、ExcuteQueryアクティビティで引数でSQL文に動的にパラメータを渡したいと考えています(DBはSQLServer)
が、ExcuteQueryでは引数は事前に決まった名前で決まった数だけしか渡せないという認識です(ExcuteQueryに限らずUiPathの引数はそうだと思いますが…)
社員IDの数がExcel上で変わる前提なので、引数を動的に設定出来ないものか?と調べてみましたが良い策がありませんでした。
何か良い案があればお知恵をお貸し下さい。

こんにちは。

パラメーターに格納する変数はDictionary[String,Argument]形式のようですね。
であればExcelで管理している動的情報を普通にDictionary変数に格納すれば良さそうです。(DictionaryはDataTableのような変数で、情報を一括で渡せるので)

1、ExcelをDataTable変数で取得
2、ForEathを用いてDictionary変数に格納
3、パラメーターで渡す

実際にやったことないので恐縮ですが、これでいけますか?

返信ありがとうございます。

Excelでの形式は以下のようになっています。
社員ID | 氏名 | 原価
----------
111111 | AA aa | 1320
22222 | BB bb | 2200 …
これをDataTableで取得して別の処理でも使っています。
この社員IDだけをSQLでWhere句に入れて条件として絞り込みたいと思っています。
Select ×× from ○○ where 社員ID IN (ここに引数で入れたい) and …
↑実際はもっと複雑なSQLですがやりたいことはこんな感じです。
Dictionaryにどうやって社員IDだけ入れてSQLに渡せばいいのか…そこからご教示頂けると幸いです(素人ですみません)

あぁ、SQL文に入れたいんですね。失礼しました。
そうなると話は変わってきます。Dictionaryの事は忘れてください。

思いついた策としては
①Access、VBAを用いる。
②ID部分はExcel関数と配列を駆使して社員IDを抽出・取得⇒構文を構成し、その他構文はExcelに用意したテンプレを参照する。

これらを思いつきましたので、以下②についてお話しします。

1、社員データを格納するシートとは別シート(図はUiPath用シート)に「=IF(ISNUMBER(社員データ!A1)=FALSE,"",社員データ!A1)」の様な関数を用意します。
(※数値以外の行を省くためです)

すると下の図のようにUiPath用シートには社員IDしか表示されないので、これをUiPathで配列として取得します。
(※一次でも二次でもどっちでも)
2

2、ForEathで2で取得した配列を指定。
(空白削除はExcel側でやっても良いかもしれません)

3、Excelからテンプレートを取得して2の社員IDを置換する。
(図での置換先は%社員ID%)
3

細かいところはさておき、ざっくりとこんな感じで如何でしょうか。
意図の擦れ違いからちょっと違う部分もあるかもしれません。
もしそうならまた言ってください。

度々ご親切にありがとうございます。
頂いた情報をヒントに閃きました。

①ExcelからのDataTableをFor Eachで社員IDのみのString変数Aに代入し’AAA’,‘BBB’,‘CCC’…となるように格納
②SQL文は外部のテキストファイルなので、テキストファイル上で中のIN句の箇所を置換できる文字列(【社員ID】)にする
(Select * From xx Where 社員ID IN(’【社員ID】’)のようにして置換文字列を【社員ID】とする)
③②のSQLをReadTextFileで読み込み、Assignアクティビティにて、Replaceメソッドで【社員ID】を①の変数に置換

という流れでうまく行きました。
ExcuteQueryの引数で渡すという頭しかありませんでした。クエリにそもそも埋め込んでしまえば良かったですね。
本当にありがとうございました!

なるほど、クエリに直接配列を指定することもできるんですね。
私はSQL周りに全く詳しくないので、逆に勉強になりました。
こちらこそありがとうございます。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.