【问题标题】:Power Query data type conversion issue running SQL Server stored procedure运行 SQL Server 存储过程的 Power Query 数据类型转换问题
【发布时间】: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


    【解决方案1】:

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

    而不是这个:

    [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") & "'"]
    

    【讨论】:

    • 就是这样 - 与号是我丢失的关键。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2023-03-13
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多