2016-03-05 93 views
1

我正在使用电源查询&我想从一个Excel单元格分配一个逗号分隔的字符串到一个sql服务器变量。目前为止,我的权力查询如下。我的参数是在创先争优“表3”中的“列2”:电源查询分配一个字符串从excel到sql服务器变量

let 

    ProdParameterSource =Excel.CurrentWorkbook(){[Name="Table3"]}[Content]{0}[Column2], 


    Source = Sql.Database("server", "database", [Query="Declare @Product varchar(max) = "&(ProdParameterSource)&" select @Product"]) 
in 
    Source 

我看到下面的错误:

enter image description here

我使用在Excel工作表中看到的参数如下:

enter image description here

我怎样才能解决这个错误,看到我的输入参数在SQL Server变量ABC为'44,216' (与倒逗号)。

回答

2

我不做很多强大的查询功能,但我在Power BI Desktop版本中工作。

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

它正在查找整个查询,或者是您构成的动态字符串或对存储过程的调用。

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

enter image description here

你缺少什么是TSQL语句或多个TSQL语句。使用分号将语句合并到一个批处理中。

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

enter image description here

系统将提示您安全(可信证书),它会告诉你,这是一个未加密的连接。

我做了一些环视NET。这篇来自里夫斯史密斯的文章就像我最后一个例子,但倾向于权力查询和excel。请记住,两款产品都使用相同的引擎。

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

再次

0

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

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

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

相关问题