如何在Power Automate中用SQL语句更新Dataverse表的计算列?
解决方案
方法1:直接用Dataverse计算列(最省心)
- 不用折腾Flow或SQL,直接在Dataverse表的设计界面把那6列设为计算列,用Dataverse自带的公式语言配置和你SQL逻辑对应的计算规则。只要那9列的数据有变动,计算列会自动同步更新,完全不用额外维护Flow。
- 操作步骤:
- 打开Power Platform Maker Portal,找到你的Dataverse表
- 点击「新建列」,类型选择「计算」
- 在公式编辑器里编写计算逻辑(比如
ColumnA + ColumnB,或者用IF、LOOKUP等函数匹配你的SQL逻辑) - 保存后,现有行和新增行都会自动算出对应值
方法2:在Power Automate里执行Dataverse SQL语句
如果你一定要用现成的SQL更新语句,Power Automate有专门的Dataverse SQL执行动作:
- 在Flow中添加「执行SQL查询(Dataverse)」动作(别选错成普通SQL Server的)
- 把你的UPDATE语句填入「查询」框,示例:
UPDATE [你的表逻辑名称] SET ColumnX = ColumnA * ColumnB, ColumnY = ColumnC + ColumnD WHERE [CreatedOn] >= addhours(utcnow(), -1) -- 建议加过滤条件,比如只更新1小时内导入的行,避免全表更新 - 注意:Flow的连接账号需要有Dataverse的表编辑权限,同时要确保你的环境开启了允许执行SQL查询的设置
- 一定要加过滤条件,不然全表更新会影响性能,甚至触发Dataverse的限流
方法3:Power Automate循环批量更新行
如果不想碰SQL,也可以用「列出行」+「更新行」的组合搞定:
- 添加「列出行(Dataverse)」动作,设置过滤条件(比如只筛选那9列已填充、6列为空的行)
- 用「应用到每一个」循环遍历查询到的每行数据
- 在循环里加「更新行」动作,用表达式计算6列的值(比如
mul(items('应用到每一个')?['columnA'], items('应用到每一个')?['columnB'])) - 把计算结果对应到更新行的对应字段里
- 数据量大的话,建议用「批量更新行」动作(需开启Dataverse批量操作功能),比循环单条更新效率高很多
注意点
- 用SQL时要注意用Dataverse表的逻辑名称(不是显示名称),可以在表设计的「高级选项」里查看
- 计算列如果搞不定复杂的跨表逻辑,再考虑用SQL或批量更新的方式
- 不管用哪种方法,都建议先在测试环境验证后再推到生产环境
内容的提问来源于stack exchange,提问作者John11
相关产品推荐
相关产品推荐

