共用方式為


存取 SQL Server 中的資料

新增資料來源

直接存取

如果您在建立應用程式時選取 [ 從資料開始 ] 選項,則資源庫的 [項目] 屬性會使用 Power Fx 公式,其資料來源名稱會直接指向您的資料庫資料表。

例如,如果您有一個 BOOKLENDING 表格,您會看到以下公式:

Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)

檢視和預存程序

常見的專業資料存取模式是使用檢視,然後使用預存程序進行建立、更新和刪除,而不是允許直接存取。 如果您想要使用檢視或預存程序,請變更範例公式。 同樣地,記錄的表單不會使用公式的 SubmitForm() 內建直接方法。

觸發程序

一種資料庫模式是在資料表上使用觸發程序。 如果資料表有觸發程序,則無法使用直接模式 Submit() 進行建立、更新和刪除。 Submit() 與 SQL 觸發程序處理和內建 Power Apps 行為衝突,這些行為使用相同的輸出參數。

您可以直接存取資料表進行查詢,但要處理 CreateUpdate或 , Delete呼叫預存程序。

注意

SQL Server 連接器就像所有使用關聯式資料的連接器一樣,假設資料表具有主索引鍵。 主索引鍵對於尋找要更新的特定記錄至關重要。 如果 SQL Server 資料表沒有主索引鍵,則資料是唯讀的。 如果您擁有 SQL Server 資料表的存取和編輯權限,請考慮新增自動產生的索引鍵。

使用檢視表

檢視是已儲存的查詢,顯示為單一資料表。

檢視會顯示在新增資料來源時可選取的資料表清單中。 檢視表僅支援查詢,不支援更新。 若要更新資料,請使用 預存程序

如果您使用該 Start with data 選項建立表格,您會獲得在資源庫和表單中顯示記錄的螢幕和公式。 您會看到用於建立、編輯和刪除記錄的公式和功能。 但是,如果您使用視圖,則只會看到圖庫和表單的顯示螢幕。

您可能需要自動 Start with data 產生的畫面 for 檢視。

若要使用此自動產生的選項:

  1. 選擇帶有Start with data
  2. 刪除並替換資料表資料來源。

範例

例如,如果您有一個 BOOKLENDINGVIEW 資料表並將其新增為 Power Apps 的資料來源,則公式可以像以下一樣簡單:

BOOKLENDINGVIEW

您也可以將其他建立、更新和刪除公式取代為檢視資料來源和預存程序的呼叫。

使用預存程序

當您將 SQL Server 連線新增至應用程式時,您可以新增預存程序並直接在 Power Fx 中呼叫它們。

注意

此功能也適用於安全隱式連接。

顯示能夠新增至您的應用程式的表格、檢視表和預存程序清單的螢幕截圖。

選取預存程序之後,子節點隨即出現,您可以將預存程序指定為 [安全] ,以用於圖庫和表格

如果預存程式未執行某些案例中可能不需要的任何動作,則預存程式是 安全的 。 例如,如果預存程序從指定城市收集所有帳戶,然後傳送電子郵件給他們,您可能不一定希望每次呼叫預存程序時都傳送電子郵件。 在此情況下,請勿將預存程式標示為安全。

僅在以下情況下才將預存程序標記為安全

  1. 根據需求呼叫此程序沒有副作用

    您可以多次呼叫程序,或在 Power Apps 重新整理控制項時呼叫程式。 當您將其與資源庫或資料表的 Items 屬性搭配使用時,每當系統確定需要重新整理時,Power Apps 就會呼叫預存程序。 您無法控制何時調用預存程序。

  2. 預存程序會傳回少量資料。

    動作呼叫 (例如預存程序) 對擷取的資料列數目沒有限制。 它們不會像表格式資料來源 (例如資料表或檢視) 一樣,以 100 筆記錄的增量自動分頁。

    如果預存程序傳回太多資料 (數千筆記錄),您的應用程式可能會變慢或當機。 基於效能原因,請引入少於 2,000 條記錄。

如果您檢查預存程序是否安全,您可以將它指派為應用程式中資源庫或資料表中的 Items 屬性。

重要

預存程序的傳回值的架構應該是靜態的,因此這些值不會在每次呼叫時發生變化。 例如,如果預存程序傳回兩個資料表,則 一律 會傳回兩個資料表。 您可以使用特定或動態結果。

結果的結構也需要是靜態的。 例如,如果結果的結構描述是 動態的,則結果是動態的,您必須提供特定類型才能在 Power Apps 中使用它們。 如需詳細資訊,請參閱 動態結果

SQL 命名空間前置於預存程序名稱

您儲存程序的 SQL Server 命名空間名稱會新增至預存程序名稱的開頭。 例如,「DBO」SQL Server 命名空間中的所有預存程序的名稱開頭都是「dbo」

例如,當您新增預存程序時,您可能會在專案中看到多個資料來源。

顯示 SQL 資料來源的螢幕截圖。

呼叫預存程序

若要在 Power Apps 中使用預存程序,請在預存程序名稱之前新增連接器名稱,例如 Paruntimedb.dbonewlibrarybook

注意

當 Power Apps 引入預存程序時,它會結合命名空間和程序名稱,因此 dbo.newlibrarybook 會變成 dbonewlibrarybook

參數作為具有命名值對的 Power Apps 記錄傳遞:

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

提示

當您將值傳遞至預存程序時,如有需要,請轉換值,因為您是從 Power Apps 中的文字值讀取值。 例如,如果您要更新 SQL 中的整數,請使用 Value()轉換欄位中的文字。

下面的範例展示了將預存程序指派給 OnSelect 屬性時的情況。

顯示如何使用鍵/值對和點表示法直接呼叫預存程序的螢幕擷取畫面。

變數和所有預存程序

在您宣告資源庫的 Items 屬性對 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);

然後,您可以將資源庫的 Items 屬性設定為變數名稱。

SP_Books

建立、更新或刪除呼叫預存程序的記錄之後,請再次設定變數以重新整理資源庫。

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

使用 Power Automate 呼叫預存程序

Power Automate 能夠最好地處理非同步操作。 呼叫預存程序,作為商務程序中一系列呼叫的一部分。

若要呼叫 Power Automate,然後呼叫預存程序,請建立輸入變數作為流程的一部分。

顯示 Power Automate 輸入的螢幕擷取畫面。

然後將輸入變數傳遞到預存程序的呼叫中。

執行預存程序

將此 Power Automate 流程新增到您的應用程式並呼叫它。 將選擇性引數作為記錄 “{ ... }」傳遞。 下列範例包含所有選擇性引數。

Power Automate 流程