使用 Power Fx 公式,可通过不同的方式连接到应用中的 SQL Server 中的数据。 您可以直接访问数据,也可以使用视图或存储过程在应用程序中创建、更新或删除数据。
先决条件
要直接访问数据,您可以为 SQL Server 数据创建开始使用数据应用。 此方法允许您获得一个基本的、可工作的应用程序,您可以使用视图和存储过程对其进行修改。
登录到 Power Apps,转到应用页面。
选择新建应用>开始使用数据。
在开始使用数据页面,选择连接外部数据。
在选择数据集以开始下,选择从 SQL。
如果您有现有 SQL Server 连接,它将加载。
备注
如果还没有 SQL Server 连接,将提示您创建。
选择您的 SQL 连接。
输入您的服务器名称和数据库名称,然后选择连接。 从显示的表列表中选择一个表。
备注
一次只能显示一个连接。 要使用不同的连接,在您的 SQL 连接上选择 ... 溢出菜单,然后查找新连接或创建新 SQL 连接。
选择创建应用。
访问数据
将应用程序连接到 SQL Server 后,您可以访问 SQL Server 中的数据:访问数据。
查看结果
要查看 SQL 查询的结果,请参阅: 在 SQL Server 中查看结果。
Power Apps 数据类型映射
| SQL Server | Power Apps |
|---|---|
bigint、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real |
编号 |
char、nchar、varchar、nvarchar、text、ntext |
文本 |
bit |
布尔 |
date、datetime、datetime2、smalldatetime、datetimeoffset、time |
日期时间 |
uniqueidentifier |
Guid |
备注
如果 SQL Server 数据类型未显示在上表中,则不支持该数据类型。
不支持的数据类型包括以下示例:binary()、、varbinary()、imagecursor、rowversion、、hierarchyidsql_variant xml空间几何类型、空间地理类型和表。 此外,不支持将“tinyint”和“smallint”作为主键。
Power Apps 函数和作可委派给 SQL Server
Power Apps 可以将 Power Fx 查询作(例如筛选器)委托给后端数据源进行处理。 委派允许后端数据服务(例如 SQL Server)执行筛选工作,以便只能将少数记录传输到设备。
此表按数据类型显示哪些作可委派给 SQL Server。 与 And、 Or和 Not 可委派的表达式联接。
| 作或函数 | 编号 | 文本 | 布尔 | 日期时间 | Guid |
|---|---|---|---|---|---|
*, +, -, / |
是的 | - | - | 否 | - |
<、<=、>、>= |
是的 | 否 | 否 | 是的 | - |
=、<> |
是的 | 是的 | 是的 | 是的 | 是的 |
Average |
是的 | - | - | - | - |
EndsWith |
- | 是 [1] | - | - | - |
Filter |
是的 | 是的 | 是的 | 是 [2] | 是的 |
In (子字符串) |
- | 是 [3] | - | - | - |
IsBlank [4] |
否 | 否 | 否 | 否 | 否 |
Len (长度) |
- | 是 [5] | - | - | - |
Lookup |
是的 | 是的 | 是的 | 是的 | 是的 |
Max |
是的 | - | - | 否 | - |
Min |
是的 | - | - | 否 | - |
Search |
否 | 是的 | 否 | 否 | - |
Sort |
是的 | 是的 | 是的 | 是的 | - |
SortByColumns |
是的 | 是的 | 是的 | 是的 | - |
StartsWith |
- | 是 [6] | - | - | - |
Sum |
是的 | - | - | - | - |
UpdateIf, RemoveIf [7] |
是的 | 是的 | 是的 | 是的 | 是的 |
注释
支持
(EndsWith(\<column>, "string value"))但不支持(EndsWith("string value", \<column>))。 如果 char(10) 列的值为“hello”,EndsWith(\<column>, "llo")则按设计返回 false。 字符(10)列包含 10 个字符。直接日期筛选器不适用于具有本地数据网关的 SQL Server。 但是,可以创建一个可行的计算列。 例如,可以创建:
ALTER TABLE myTable ADD DateAsInt AS (YEAR([date]) * 10000 + MONTH([date]) * 100 + DAY([date]))
然后筛选计算数字列。支持
("string value" in \<column>),但不支持(\<column> in "string value")。表达式(例如
Filter('[dbo].[MyOrders]', !IsBlank(CustomerId))不会委托给服务器)。 但是,可以使用一个表达式,例如Filter('[dbo].[MyOrders]', CustomerId <> Blank()),它确实委托给服务器,并且语义上是接近的。 区别在于,第二个表达式不会将空字符串 (“”) 视为空。 尽管表达式不相等,但后者可能适用于你的目的。 不能对 Guid 数据类型使用此方法。Power Apps 委托函数
Len,但行为可能无法按预期工作。 在 SQL Server 中,值为“hello”的 char(10)列始终长度为 10。 但是,Power Apps 会将该字符串视为长度为 5,这可能会导致差异和混淆。 不要在char/ncharSQL Server 上使用,而是改用。varchar/nvarchar支持
(StartsWith(\<column>, "string value")),但不支持(StartsWith("string value", \<column>))UpdateIf 和 RemoveIf 在本地工作,但模拟委派到 500/2000 条记录的限制。 他们先后将记录降低到非委派 500/2000 记录限制之外。 收集满足 If 条件的记录。 通常,最多收集 500/2000 条记录,然后每次执行更改。 但是,如果现有的本地数据缓存较大,则可能会更新更多记录,因为该函数可能有权访问更多记录以供评估。