共用方式為


存取 SQL Server 中的資料

新增資料來源

直接存取

如果您在建立應用程式時選擇從資料開始選項,則資源庫的 Items 屬性將具有 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 自動產生的畫面作為檢視表。

對於這個自動產生的選項:

  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 等) 來存取多個結果。

例如,從名為 dbo.spo_show_all_library_books() 的表 Paruntimedb 存取的預存程序如下所示:

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 flow