电源查询从Excel中分配一个string到SQL Servervariables

我正在使用电力查询&我想分配一个逗号分隔的string从Excel单元格到SQL Servervariables。 到目前为止我所拥有的权力查询如下。 我的参数在“Column2”中的Excel“Table3”中:

let ProdParameterSource =Excel.CurrentWorkbook(){[Name="Table3"]}[Content]{0}[Column2], Source = Sql.Database("server", "database", [Query="Declare @Product varchar(max) = "&(ProdParameterSource)&" select @Product"]) in Source 

我看到下面的错误:

在这里输入图像说明

我在Excel表中使用的参数如下:

在这里输入图像说明

我怎样才能解决这个错误,并看到我的sql服务器variablesABC中的input参数为'44,216'(与反向逗号)。

我不做大量的电力查询,但我在Power BI Desktop版本中工作。

首先,您需要查看MSDN上对SQL.Database()的引用。

它正在查找一个完整的查询,可以是您构成的dynamicstring,也可以是对存储过程的调用。

我下面的简单示例,从Adventure Works DW 2012客户表中提取数据。

在这里输入图像说明

你所缺less的是一个TSQL语句或多个TSQL语句。 使用分号将语句合并到一个批处理中。

下面的例子创build一个variables@x作为一个整数并返回值。 这几乎就像你上面的例子。

在这里输入图像说明

系统会提示您input安全性(受信任的凭据),并会告诉您这是一个未encryption的连接。

我做了一些环视NET。 从里夫斯·史密斯这篇文章是像我最后的例子,但倾向于电力查询和优秀。 请记住,这两个产品使用相同的引擎。

https://reevessmith.wordpress.com/2014/08/19/power-query-and-stored-procedures-with-parameters/

再次

这将解决它: [Query="Declare @Product varchar(max) = '" & ProdParameterSource & "' select @Product"])

这将以更安全的方式解决它,因为你会转义任何额外的单引号可能突破string值: [Query="Declare @Product varchar(max) = '" & Text.Replace(ProdParameterSource, "'", "''") &"' select @Product"])

发生了什么事情是Power Query将传递给Query的文本视为整个脚本,并且当您构build脚本时,您没有将ProdParameterSource的值放在引号中,因此脚本似乎将varchar值设置为44,216(不含引号) 。 这是一个无效的陈述。