我编写了一个SQL脚本,在SQL Management Studio中直接执行时运行正常。但是,当将其作为源输入到Power BI时,它会报告它的语法不正确。
这是查询:
EXEC "dbo"."p_get_bank_balance" '2'
但是,语法显然不正确?见图:
非常感谢任何帮助。
编辑***
删除双引号时:
答案 0 :(得分:7)
我很久以前在power bi网站上发现了同样的问题:
http://community.powerbi.com/t5/Desktop/Use-SQL-Store-Procedure-in-Power-BI/td-p/20269
您必须使用DirectQuery模式,在该模式下,您无法使用存储过程连接到数据。使用导入模式再次尝试或直接使用SELECT语句。
答案 1 :(得分:2)
在DirectQuery模式下,PowerBI自动包装您的查询:select * from ( [your query] )
,如果您在SSMS中使用存储过程尝试此操作,即
select * from (exec dbo.getData)
您收到上述错误。
解决方案是您必须将存储过程调用放在对本地服务器的OPENQUERY调用中,即
select * from OPENQUERY(localServer, 'DatabaseName.dbo.getData')
先决条件是:使用
在OPENQUERY中启用本地服务器访问exec sp_serveroption @server = 'YourServerName'
,@optname = 'DATA ACCESS'
,@optvalue = 'TRUE'
然后确保在OPENQUERY中使用三部分表示法,因为所有调用默认为master
数据库
答案 2 :(得分:0)
使用“导入”数据连接模式,存储过程可以正常工作 在“直接查询”数据连接模式下,查询语法必须如下所示:
声明@sqlCommand varchar(100)='dbo.p_get_bank_balance' 声明@ p1 int = 2
exec @sqlCommand @ p1 = @ p1
Remerber:使用Direct Query最多可以建立一个数据源连接。如果要调用很多SP,则只能在直接查询模式下调用其他SP,
答案 3 :(得分:0)
尝试使用导入代替直接查询。可能由于您在其中使用Temp表而显示错误。使用子查询创建查询并删除Temp表并尝试。或者,您可以用作导入而不是直接查询。