最新版本的Excel M365和Server 2017。
我有一个存储过程,它将日期作为其格式YYYY DD的输入,目前变量类型被设置为nvarchar(20)
,但我也试图通过使其类型为Date
来解决这个问题。
我有一个存储过程,在this中运行时,如下所示:
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,并将其设置为text类型,因为这是存储过程所期望的。
现在,M查询如下所示:
= Sql.Database("contoso.database.windows.net", "Database1", [Query="EXECUTE [Database1].[dbo].[SP1]#(lf)@Date = SDate"])
当我运行它时,我会在Power Query中得到以下错误:
Microsoft :从字符串转换日期和/或时间时,转换失败。
我试过的另外两件事:
SDate
创建了一个文本字符串,该字符串由单引号(即'2020-10-01'
)包围,这给出了相同的错误。Date
。通过在SSMS中运行与上面相同的T语句来测试这一点,结果返回的时间与nvarchar
相同。因此,在Power查询中,我确保了SDate
参数的类型为date。然后运行M查询,这一次得到错误“错误转换类型nvarchar to date”,。
我发现一件有趣的事情是,在创建了前面提到的M查询之后,如果进入运行查询的步骤的Source
设置,则SQL语句框显示如下:
EXECUTE [Database1].[dbo].[SP1]
@Date = SDate
在我看来,这似乎是将一个文本SDate
作为日期传递给Server,而不是该参数的值。我可能弄错了。
有什么想法让它正常运行吗?
发布于 2020-11-17 21:53:36
如果把文字字符串放在正确的位置,它就能工作。您需要在引号中退出文字文本,并追加或插入所需的字符串。
而不是这样:
[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") & "'"]
https://stackoverflow.com/questions/64882066
复制相似问题