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.
我尝试了另外两件事:
为 SDate
创建一个文字字符串,这是用单引号括起来的日期,即 '2020-10-01'
- 这给出了同样的错误。
更改了存储过程,因此 @Date 变量的类型为 Date
。通过 运行 在 SSMS 中使用与上面完全相同的 T-SQL 语句进行测试,结果 return 与 nvarchar
时相同。因此,在 Power Query 中,我确保 SDate
参数的类型为日期。然后我 运行 M 查询,这次我收到错误“将类型 nvarchar 转换为日期时出错。”
我发现有趣的一件事是,在创建上述 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") & "'"]
最新版本 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.
我尝试了另外两件事:
为
SDate
创建一个文字字符串,这是用单引号括起来的日期,即'2020-10-01'
- 这给出了同样的错误。更改了存储过程,因此 @Date 变量的类型为
Date
。通过 运行 在 SSMS 中使用与上面完全相同的 T-SQL 语句进行测试,结果 return 与nvarchar
时相同。因此,在 Power Query 中,我确保SDate
参数的类型为日期。然后我 运行 M 查询,这次我收到错误“将类型 nvarchar 转换为日期时出错。”
我发现有趣的一件事是,在创建上述 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") & "'"]