如何使用Power Query同时查询两台SQL服务器存储过程并合并结果集
实现步骤
步骤1:读取单元格参数到Power Query
首先把C1、C2的日期值定义为Power Query可全局调用的参数:
- 选中单元格C1,在公式栏左侧的名称框输入
FromDate按回车完成命名,用同样方式把C2命名为ToDate - 点击「数据」选项卡 → 「获取数据」→ 「自其他源」→ 「空白查询」
- 在查询编辑器的公式栏输入:
= Excel.CurrentWorkbook(){[Name="FromDate"]}[Content]{0}[Column1],将该查询命名为Param_FromDate,数据类型设置为文本 - 新建另一个空白查询,输入:
= Excel.CurrentWorkbook(){[Name="ToDate"]}[Content]{0}[Column1],命名为Param_ToDate,数据类型同样设置为文本
步骤2:创建服务器A的存储过程调用查询
- 点击「数据」→「获取数据」→「自数据库」→「自SQL Server数据库」
- 输入服务器A的地址、A公司对应数据库名,选择「高级选项」,先随便输入一句简单SQL进入查询编辑器,之后把查询代码替换为以下内容:
let 调用SP_A = Sql.Database("替换为服务器A的实际地址", "替换为A公司实际数据库名", [Query="exec SP_A @From_date = '" & Param_FromDate & "', @To_date = '" & Param_ToDate & "'"]) in 调用SP_A
- 验证返回结果包含
Product、price、orderNum三个字段后,将该查询命名为Result_A,保存时选择「仅创建连接」,不要加载到工作表
步骤3:创建服务器B的存储过程调用查询
操作逻辑和步骤2完全一致,仅替换服务器地址、数据库名、存储过程名称即可,查询命名为Result_B,同样仅创建连接:
let 调用SP_B = Sql.Database("替换为服务器B的实际地址", "替换为B公司实际数据库名", [Query="exec SP_B @From_date = '" & Param_FromDate & "', @To_date = '" & Param_ToDate & "'"]) in 调用SP_B
步骤4:合并两个结果集输出
- 新建空白查询,输入以下代码合并两个结果:
let 合并结果 = Table.Combine({Result_A, Result_B}) in 合并结果
- 点击「关闭并上载」,选择你要存放结果的工作表位置即可,后续修改C1、C2的日期后直接刷新数据就能得到新的合并结果。
注意事项:
- 合并前可检查两个返回结果的列顺序、数据类型是否完全一致,避免合并后出现字段错位
- 若存储过程对日期参数的格式有特殊要求,可在
Param_FromDate、Param_ToDate查询中增加格式转换步骤,确保匹配存储过程要求的varchar(10)格式- 首次连接SQL服务器时按提示输入账号密码即可,后续刷新会自动复用凭证
内容的提问来源于stack exchange,提问作者ChefJ
相关产品推荐
相关产品推荐

