Power AutomateでSQLコネクタを使用している際に、クエリが想定どおりに実行されず、更新や取得が行われないケースがあります。原因の多くは、入力条件の記述ミスやアクションの処理順の誤認識にあります。本記事では、実際のトラブル事例を交えながら、SQLコネクタが期待通りに動かない場合の確認ポイントを整理します。
【要点】この記事で確認すること
- 最初に見る場所: SQLコネクタの「クエリ」プロパティに入力したSQL文、およびパラメータのデータ型と値
- 切り分けの軸: 入力条件の問題(パラメータの型・NULL・日付形式)と、処理順の問題(並列実行・ループ内でのコンフリクト)
- 注意点: 会社PCで勝手にコネクタの接続設定やSQL Serverの権限を変更せず、管理者に確認する必要がある項目があること
ADVERTISEMENT
目次
SQLコネクタが想定どおり進まない主な原因
Power AutomateのSQLコネクタには「行の取得」「行の追加」「行の更新」「行の削除」などのアクションがあります。どのアクションでも、入力したSQL文やパラメータの指定方法が不適切だと、エラーにならずにスキップされたり、別の行が対象になったりすることがあります。原因は大きく分けて「入力条件の問題」と「処理順の問題」の2つです。
入力条件のミスパターン
最も多いのが、日付や数値のパラメータを文字列として渡してしまうケースです。SQLコネクタでは、パラメータのデータ型を明示的に指定しないと、自動変換が行われず、クエリが一致しないことがあります。また、WHERE句でNULLを比較する際に「= NULL」と書いてしまうとSQLの仕様上正しく動作しません(IS NULLが必要)。以下に代表的なミスをまとめます。
| パターン | 誤った記述例 | 正しい記述例 |
|---|---|---|
| 日付比較 | WHERE DateCol = ‘2025/03/15’ | WHERE DateCol = ‘2025-03-15’ (ISO形式) |
| NULL判定 | WHERE Col = null | WHERE Col IS NULL |
| 数値パラメータ | WHERE ID = ‘100’ | WHERE ID = 100 (数値として入力) |
| ワイルドカード | WHERE Name LIKE ‘田中%’ | WHERE Name LIKE N’田中%’ (Unicodeプレフィックス要注意) |
また、Power Automateの動的コンテンツを使って日付を渡す場合、既定の形式がUTCのISO8601であることを前提にしてください。日本時間で比較したい場合は、formatDateTime関数で変換してから使用します。
処理順の問題
Power Automateはアクションをデフォルトで逐次実行しますが、並列オプションを有効にしていると、複数のSQLコネクタが同時に実行され、同一レコードに対する更新が競合することがあります。また、「Apply to each」ループ内でSQLの更新を連続して行うと、ループの順序が不定になる場合があります。特に、同じテーブルに対して連続して実行するアクションがある場合は、意図した順序で実行されず、想定外の結果になることがあります。
入力条件の見直し手順
SQLコネクタが期待通りに動作しない場合、まずは入力条件を以下の順序で確認してください。
- SQL文そのものを、SSMSなどで直接実行し、正しい結果が得られるか確認する。
- Power Automateの「クエリ」欄に指定したSQL文が、パラメータ化されているかどうか確認する。パラメータ化する場合、@パラメータ名 の形式で記述し、アクションの「パラメータ」欄に値と型を設定する。
- 日付型のパラメータがある場合、Power Automateの式を使用して適切な形式に変換する。例:
formatDateTime(triggerOutputs()?['body/date'], 'yyyy-MM-dd') - NULLを扱う条件では、IS NULLまたはIS NOT NULLを使用し、パラメータにNULLを渡す場合は式でnullを指定する(例:
@null)。 - 文字列比較で大文字小文字を区別する場合は、COLLATE句やデータベースの照合順序を考慮し、必要に応じてSQL側で調整する。
上記の確認を行っても問題が解決しない場合は、Power Automateの実行履歴を開き、各アクションの入力と出力を詳細に確認してください。特に「スキップ」ステータスになっているアクションがないか、エラーが発生していないかを確認します。
処理順の見直し手順
処理順が原因で想定どおり進まないケースでは、以下の手順で問題を特定します。
- フローのアクション構成を見直し、どのアクションが先に実行されるべきかを整理する。
- 「並列」オプションが有効になっているアクションのグループを確認し、順序が重要な場合は「逐次」に変更する。
- 「Apply to each」ループ内でSQLアクションを使用する場合、ループの反復順序を固定したいときは「並列度」を1に設定する。
- トランザクションが必要な操作(複数のテーブル更新など)は、ストアドプロシージャを呼び出すようにし、Power Automate側でトランザクション管理は行わない。
- デバッグのために、各SQLアクションの後に「変数の増加」などを入れて実行順序をログに残す。
失敗パターン具体例:「Apply to each」で取得したレコードをループ内で更新する際、更新に使う条件にループ外の値を使っている場合、最初の反復以外ではその値が変わらず、意図しないレコードが更新されることがあります。この場合は、ループ内で毎回取得したレコードのIDを使うように修正します。
管理者に確認すべき項目
トラブルシューティングの過程で、自分では変更できない設定に行き当たることがあります。以下の項目は管理者に確認を依頼してください。
- SQLコネクタが使用している接続の認証方式(Windows認証、SQL Server認証、Azure AD認証)が適切か。
- Power AutomateからSQL Serverへのアクセスがファイアウォールやオンプレミスデータゲートウェイで制限されていないか。
- 使用しているSQL Serverのバージョンと、Power AutomateのSQLコネクタがサポートする機能に差異がないか。
- テーブルやビューに対する権限(SELECT、INSERT、UPDATE、DELETE)が適切に付与されているか。
よくある質問(Q&A)
Q1: WHERE句で複数条件をANDやORで結合する場合の注意点は?
条件の優先順位を明確にするために、必ず括弧で囲んでください。特にORとANDを混在させる場合は、(条件1 AND 条件2) OR 条件3 のように指定します。
Q2: パラメータがNULLの場合の扱い方は?
Power Automateの式で@nullを使用してNULL値を渡せますが、SQL側でIS NULLと比較する必要があります。パラメータがNULLかどうかで条件を分けたい場合は、条件分岐をフロー内で行い、異なるSQL文を使い分ける方が確実です。
Q3: 実行結果が0行だった場合に後続のアクションをスキップするには?
「行の取得」アクションの後に「条件」アクションを配置し、outputs?[‘value’]?[0] が存在するか確認する方法があります。また、アクションの「実行後」設定で「成功時のみ」や「スキップ時」を適切に設定します。
まとめ
Power AutomateのSQLコネクタが想定どおりに動作しない場合、まずは入力条件のパラメータ型や日付形式を徹底的に見直し、次にフローの処理順序が正しいか確認します。特に、並列実行とループ内での順序は意図しない結果を生みやすいため、設計段階から意識することが重要です。管理者への確認が必要な項目は早めに依頼し、デバッグには実行履歴の入出力ログを活用してください。これらのポイントを押さえることで、SQLコネクタのトラブルを効率的に解決できます。
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Excel】文字が入っているセルの「個数」を数える!COUNTA関数の簡単な使い方
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
