【发布时间】:2020-11-17 19:31:34
【问题描述】:
最新版本的 Excel M365 和 SQL Server 2017。
我有一个存储过程,它以 YYYY-MM-DD 格式将日期作为其输入 - 当前变量类型设置为 nvarchar(20),但我也尝试通过将其设置为 @987654322 来解决此问题@。
我有一个在 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:转换日期和/或时间时失败 字符串。
我尝试过的另外两件事:
-
为
SDate创建一个文字字符串,即用单引号括起来的日期,即'2020-10-01'- 这给出了相同的错误。 -
更改了存储过程,使@Date 变量的类型为
Date。通过在 SSMS 中运行与上述完全相同的 T-SQL 语句进行测试,结果返回与nvarchar时相同。因此,在 Power Query 中,我确保SDate参数的类型为日期。然后我运行 M 查询,这次我收到错误“将类型 nvarchar 转换为日期时出错。”
我发现有趣的一件事是,在创建上述 M 查询后,如果我进入运行查询的步骤的 Source 设置,SQL 语句框会显示:
EXECUTE [Database1].[dbo].[SP1]
@Date = SDate
对我来说,这看起来像是将文字 SDate 作为日期传递给 SQL Server,而不是该参数的值。我可能错了。
对让它正确运行有什么想法吗?
【问题讨论】:
标签: sql-server powerquery m