Power Apps から SQL Server に接続する

Azure または オンプレミスの データベースの SQL Server に接続できます。

注意

新しく作成された SQL データソースの接頭辞が、以前のバージョンの Power Apps のように [dbo] ではなくなりました。

詳細については、Power Apps に共通する問題と解決策 をご覧ください。

アプリを自動的に生成する

どの Power Apps インターフェイスを使用しているかによって、アプリを構築するために新しい外観またはクラシックな外観を参照してください。

  1. Power Apps にサインインします。

  2. ホーム ページから、 単一ページのギャラリー または 3 画面モバイル オプションを選択します:

    • レスポンシブ レイアウトを備えた単一ページのギャラリー アプリを作成するには、次のいずれかを選択します。
      • データから開始 > 外部データを選択 > SQL から
      • ページ デザインから開始 > 外部データに接続されたギャラリー > SQL から
    • 3 画面モバイル アプリを作成するには、アプリ テンプレートから開始 > SQL から を選択します。
  3. SQL 接続を選択し、テーブルを選択します。 別の接続を選択するには、... オーバーフロー メニューを選択して接続を切り替えるか、新しい SQL 接続を作成します。

    注意

    一度に 1 つの接続だけ表示されます。

  4. 終了後は アプリの作成 を選択します。

Power Fx でストアド プロシージャを直接呼び出します (プレビュー)

SQL Server ストアド プロシージャのプレビュー スイッチをオンにすると、Power Fx から SQL Server ストアド プロシージャを直接呼び出すことができます。

注意

出力パラメーターはサポートされていません。

  1. 設定 > 今後の機能 > プレビュー に移動します。
  2. ストアド プロシージャ を検索します。
  3. SQL Server のストアドプロシージャ のトグルを オン に切り替えます。
  4. アプリを保存し、再度開きます。

SQL Server ストアド プロシージャの切り替えがオンに設定されていることを示すスクリーンショット。

SQL Server 接続をアプリに追加すると、テーブルとビュー、またはストアド プロシージャを追加できるようになります。 この機能は、安全な暗黙的接続でも機能します。

アプリに追加できるテーブル、ビュー、ストアド プロシージャのリストを示すスクリーンショット。

ストアド プロシージャがすぐに表示されない場合は、検索した方が早いです。

ストアド プロシージャを選択すると、子ノードが表示され、ストアド プロシージャを ギャラリーやテーブルに安全に使用できる として指定できます。 このオプションをオンにすると、アプリで使用するテーブルのギャラリーの Items プロパティとしてストアド プロシージャを割り当てることができます。

このオプションは次の場合にのみ有効にしてください:

  1. Power Apps がコントロールを更新するたびに、このプロシージャをオンデマンドで何度も呼び出しても副作用はありません。 ギャラリーまたはテーブルの品目プロパティで使用される場合、Power Apps はシステムが更新が必要であると判断するたびにストアド プロシージャを呼び出します。 ストアド プロシージャがいつ呼び出されるかを制御することはできません。
  2. ストアド プロシージャで返されるデータの量は 少量です。 ストアド プロシージャなどのアクション呼び出しには、取得する行数に制限がありません。 テーブルやビューなどの表形式のデータ ソースのように、100 レコード単位で自動的にページングされることはありません。 したがって、ストアド プロシージャが多すぎるデータ (数千のレコード) を返すと、アプリの速度が低下したり、クラッシュしたりする可能性があります。 パフォーマンス上の理由から、取り込むレコードは 2,000 未満にする必要があります。

重要

ストアド プロシージャの戻り値のスキーマは静的でなければなりません。 つまり、通話ごとに内容は変わりません。 たとえば、ストアド プロシージャを呼び出して 2 つのテーブルを返す場合、常に 2 つのテーブルを返す必要があります。 もし結果のスキーマが動的なものであれば、Power Apps と一緒に使用するべきではありません。 たとえば、ストアド プロシージャを呼び出したときに、あるときは 1 つのテーブルを返し、あるときは 2 つのテーブルを返すとすると、Power Apps では正しく動作しません。 Power Apps はこの呼び出しに静的スキーマを必要とします。

ストアド プロシージャを追加すると、プロジェクト内に複数の データ ソース が表示される場合があります。

SQL データ ソースを示すスクリーンショット。

Power Apps でストアド プロシージャを使用するには、まずストアド プロシージャ名の前に、それに関連付けられたコネクタ名とストアド プロシージャ名を付けます。 この例の「Paruntimedb.dbonenewlibrarybook」は、このパターンを示しています。 また、Power Apps がストアド プロシージャを取り込む際、フルネームが連結されることにも注意してください。 したがって、「dbo.newlibrarybook」は「dbonenewlibrarybook」になります。

Power Apps のテキスト値から読み取っているので、必要に応じて値を適切に変換してストアドプロシージャに渡すことを忘れないでください。 たとえば、SQL で整数を更新する場合は、「Value()」を使用してフィールド内のテキストを変換する必要があります。

ストアド プロシージャを直接呼び出す。

ギャラリーの 品目 プロパティに対するストアド プロシージャは、UI に対して安全であることを宣言した後にアクセスすることができます。 データ ソース 名と、その後に「ResultSets」が続くストアド プロシージャの名前を参照します。 テーブル 1、テーブル 2 など、返されたテーブルのセットを参照することで、複数の結果にアクセスできます。

たとえば、「Paruntimedb」という名前の データ ソース からのストアド プロシージャに、「dbo.spo_show_all_library_books()」という名前のストアド プロシージャを使用してアクセスすると、次のようになります。

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

これにより、ギャラリーにレコードが追加されます。 しかし、ストアド プロシージャは表形式モデルにアクションの動作を追加したものです。 Refresh() は表形式のデータ ソースでのみ機能し、ストアド プロシージャでは使用できません。 次に、レコードが作成、更新、または削除されたときにギャラリーを更新する必要があります。 表形式 データ ソース のフォームで Submit() を使用すると、内部で Refresh() が効果的に呼び出され、ギャラリーが更新されます。

この制限を回避するには、画面の OnVisible プロパティで変数を使用し、ストアド プロシージャをその変数に設定します。

Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

そして、ギャラリーの「品目」プロパティを変数名に設定します。

SP_Books

次に、ストアド プロシージャを呼び出してレコードを作成、更新、または削除した後、変数を再度設定します。 これによりギャラリーが更新されます。

Paruntimedb.dbonewlibrarybook({   
  book_name: DataCardValue3_2.Text, 
  author: DataCardValue1_2.Text,
    ...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

既知の問題

SQL データ ソースがデータ ソース名に [dbo] 接頭辞を追加しなくなりました。

データ ソース名は自動的に曖昧さをなくすため、[dbo] という接頭辞は Power Apps では実用的な役割を果たしません。 既存のデータ ソースはこの変更の影響を受けませんが、新しく追加された SQL データ ソースには接頭辞が含まれません。

1 つのアプリで大量の数式を更新する必要がある場合は、Power Apps ソース ファイル パックおよびアンパック ユーティリティ を使用してグローバル検索-および-置換を行うことができます。

注意

バージョン 3.21054 以降では、データ ソースの読み取り後に、壊れたレガシ名の参照を新しいデータ ソース名に自動的に更新します。

次の手順

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。