次の方法で共有


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。 デフォルトでは、この 新しい スイッチはオンになっているはずです。 そうでない場合は、オンにすることができます。

  1. [設定] > [アップデート] > [新規] に移動します
  2. ストアド プロシージャ を検索します。
  3. SQL Server のストアドプロシージャ のトグルを オン に切り替えます。
  4. アプリを保存し、再度開きます。

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

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

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

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

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

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

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

重要

ストアド プロシージャの戻り値のスキーマは静的でなければなりません。 つまり、通話ごとに変化しないということです。 たとえば、ストアド プロシージャを呼び出して2つのテーブルが返される場合、 常に 2つのテーブルが返される必要があります。 型付けされた結果または型付けされていない結果のいずれかを操作できます。 結果の構造は呼び出しごとに同じである必要があります。 結果のスキーマが 動的 である場合、結果は型指定されず、 Power Apps で使用するために型を指定する必要があります。 詳細については、 「入力されていない結果」 を参照してください。

ストアド プロシージャ名の先頭にSQL名前空間が付加される

ストアド プロシージャが格納されているSQL Server名前空間の名前は、 Power Apps で作成されたストアド プロシージャの名前の先頭に追加されます。 たとえば、 'DBO' SQL Server名前空間内のすべてのストアド プロシージャの名前の先頭には、 'dbo' が付きます。

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

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

ストアドプロシージャの呼び出し

Power Apps でストアド プロシージャを使用するには、まずストアド プロシージャ名の前に、それに関連付けられたコネクタ名とストアド プロシージャ名を付けます。 この例の「Paruntimedb.dbonenewlibrarybook」は、このパターンを示しています。 Power Apps がストアド プロシージャを導入すると、名前空間とプロシージャ名が連結され、「dbo.newlibrarybook」が「dbonewlibrarybook」になります。

引数は、名前付き値のペアを持つ Power Apps レコードとして渡されます。

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

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

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

結果へのアクセス

ストアド プロシージャは、コード、Outパラメータからの値、またはクエリの結果を返すことができます。 これらの結果にアクセスするには、次のパターンを使用します。

戻りコード

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ReturnCode

returnステートメントの結果にアクセスするにはこれを使用します。

出力パラメーター

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).OutputParameters.<parameterName>

JSONペイロードに表示されるパラメータ名を使用するように注意してください。

結果セット

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ResultSets.Table1

追加のテーブルには、名前でアクセスできます (例: Table1、Table2、Table3、...)

未入力の結果

一部の複雑なストアド プロシージャは、型指定されていない結果を返します。 これらの結果には直接アクセスできません。 まずタイプを指定する必要があります。 次のパターンを使用してデータにアクセスできます。

この例では、まず結果を「MyUntypedObject」という名前の変数に格納します。 次に、その変数から「Table1」を取得し、「table1」という名前の変数に格納します。 この 手順 は厳密には必要ありません。 ただし、すべての結果を ポイントする の変数に時間内に配置して、必要な部分を取り出すと便利です。 次に、table1を反復処理し、名前付き値のペアでJSON要素を抽出します。 名前がJSONペイロードで返される名前と一致していることを確認してください。 検証するには、 Power Apps モニターを開き、レコードのデータ ノードの本体セクションを確認します。

Set(
    <MyUntypedObject>,
    <datasourceName>.<StoredprocedureName>( 
      { <paramName1>: "someString" }
    ).ResultSets
);
Set(
    table1,
    <MyUntypedObject>.Table1
);
Set(
    TypedTable,
    ForAll(
        table1,
        {
            BookID: Value(ThisRecord.BookID),
            BookName: Text(ThisRecord.BookName)
        }
    )
);

ギャラリーの 品目 プロパティに対するストアド プロシージャは、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 分かかります。 個人データは収集されません (プライバシー ステートメント)。