Power Query 数据类型转换问题 运行 SQL 服务器存储过程

Power Query data type conversion issue running SQL Server stored procedure

最新版本 Excel M365 和 SQL Server 2017。

我有一个存储过程,它以 YYYY-MM-DD 格式将日期作为输入 - 当前变量类型设置为 nvarchar(20),但我也尝试通过以下方式解决此问题输入 Date.

我有一个存储过程,当 运行 in T-SQL 时,它看起来像这样:

EXECUTE [Database1].[dbo].[SP1]
@Date = '2020-10-01'

我正在使用 Power Query 将其结果提取到 Excel。下面是生成的 M 查询在 Power Query 中的样子:

= Sql.Database("contoso.database.windows.net", "Database1", [Query="EXECUTE [Database1].[dbo].[SP1]#(lf)@Date = '2020-10-01'"])

这 运行 秒并按预期导入数据。

但是现在我正在尝试从 Excel 中的单元格中导出 @Date 值。我遵循了一个很好的教程,使 Excel 单元格中的日期可用于 Power Query,我相信我的设置正确。我已将参数命名为 SDate,并将其设置为文本类型,因为这是存储过程所期望的。

现在 M 查询如下所示:

= Sql.Database("contoso.database.windows.net", "Database1", [Query="EXECUTE [Database1].[dbo].[SP1]#(lf)@Date = SDate"])

当我 运行 这样做时,我在 Power Query 中收到此错误:

Microsoft SQL: Conversion failed when converting date and/or time from character string.

我尝试了另外两件事:

我发现有趣的一件事是,在创建上述 M 查询之后,如果我为 运行 查询的步骤进入 Source 的设置,SQL 语句方框显示:

EXECUTE [Database1].[dbo].[SP1]
@Date = SDate

对我来说,这看起来像是将文字 SDate 作为日期传递给 SQL 服务器,而不是该参数的值。我可能错了。

有没有想过如何正确地运行?

如果你把它放在右边,文字串就可以工作。您需要退出引号内的文字文本并追加或插入您想要的字符串。

而不是这个:

[Query="EXECUTE [Database1].[dbo].[SP1] @Date = SDate"]

试试这个:

[Query="EXECUTE [Database1].[dbo].[SP1] @Date = " & Sdate]

其中 Sdate 已定义为文字字符串 '2020-10-01'

如果 Sdate 是日期,则使用:

[Query="EXECUTE [Database1].[dbo].[SP1]
@Date = '" & Date.ToText(Sdate, "yyyy-MM-dd") & "'"]