从 Power Query 运行参数化存储过程

从 Power Query 运行参数化存储过程

我一直在关注教程这里但每当我尝试刷新工作簿时,它都会出现以下错误:

DataSource.Error:Microsoft SQL:此数据库函数不支持值为“null”的查询选项“Query”。

这是查询背后的 SQL,没有任何内容返回 null,并且存储过程设置为接受 3 个输入参数。

CSR=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"CSR"],
d1=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d1"],
d2=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d2"],
Source = Sql.Database("ServerInstanceName", "Credentials", 
[Query="exec [dbo].[StoredProcToRun] '" & Number.ToText(d1)
& "''," & Number.ToText(d2) & "','" & CSR & "'"])

这是我的存储过程的设置,显示它接受 3 个参数:

Alter PROCEDURE dbo.StoredProcToRun 
@d1 varchar(50), @d2 varchar(50), @CSR varchar(500)

AS
BEGIN

为了让此电源查询将 Excel 参数传递给我的 SQL 存储过程并将数据返回到 Excel 工作簿,我需要修改什么?

我将 Power Query SQL 更改为以下内容,现在出现错误

应为标记逗号

[Query="exec [dbo].[StoredProcToRun] 
& Number.ToText(d1) & "','"
& Number.ToText(d2) & "','" 
& CSR & "'"])

答案1

连接子字符串时,请确保有一个字符串。数值(例如 CSR)必须转换为字符串才能进行连接。

CSR=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"CSR"],
d1=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d1"],
d2=Excel.CurrentWorkbook(){[Name="param"]}[Content]{0}[#"d2"],
Source = Sql.Database("ServerInstanceName", "Credentials", 
    [Query="exec [dbo].[StoredProcToRun] '" &
    Number.ToText(d1)  & "','" & 
    Number.ToText(d2)  & "','" & 
    Number.ToText(CSR) & "'"])

也可以看看这里您找到的教程中的另一个示例。

刚刚尝试使用脚本的一部分来生成 EXEC 语句的字符串。最后尝试生成字符串并将其复制到 Management Studio 上以检查它是否在那里有效。

在此处输入图片描述

相关内容