SQL 在 Power BI 中 运行 时报告无效语法
SQL reporting invalid syntax when run in Power BI
我写了一个 SQL 脚本,直接在 SQL Management Studio 中执行时运行良好。但是,当将它作为源输入到 Power BI 时,它报告它的语法不正确。
这是查询:
EXEC "dbo"."p_get_bank_balance" '2'
但是,语法显然不正确?见图:
非常感谢任何帮助。
编辑 ***
删除双引号后(根据 Tab Alleman 的建议):
我前段时间在 power bi 网站上发现了同样的问题:
http://community.powerbi.com/t5/Desktop/Use-SQL-Store-Procedure-in-Power-BI/td-p/20269
You must be using DirectQuery mode, in which you cannot connect to data with stored procedures. Try again using Import mode or just use a SELECT statement directly.
在 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
数据库
与"Import"数据连接模式存储过程工作
使用 "Direct Query" 数据连接模式,查询语法必须如下所示:
声明@sqlCommand varchar(100) = 'dbo.p_get_bank_balance'
声明@p1 int = 2
exec @sqlCommand @p1 = @p1
注意:最多有一个数据源与 Direct Query 连接。如果要调用多个SP,只能一个用Direct Query方式,其他用Import方式
尝试使用 导入 而不是直接查询。它可能显示错误,因为您在其中使用了 Temp table。使用子查询创建查询并删除 Temp table 并尝试。或者您可以使用 Import 而不是 Direct Query 它会起作用。
我写了一个 SQL 脚本,直接在 SQL Management Studio 中执行时运行良好。但是,当将它作为源输入到 Power BI 时,它报告它的语法不正确。
这是查询:
EXEC "dbo"."p_get_bank_balance" '2'
但是,语法显然不正确?见图:
非常感谢任何帮助。
编辑 ***
删除双引号后(根据 Tab Alleman 的建议):
我前段时间在 power bi 网站上发现了同样的问题:
http://community.powerbi.com/t5/Desktop/Use-SQL-Store-Procedure-in-Power-BI/td-p/20269
You must be using DirectQuery mode, in which you cannot connect to data with stored procedures. Try again using Import mode or just use a SELECT statement directly.
在 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
数据库
与"Import"数据连接模式存储过程工作 使用 "Direct Query" 数据连接模式,查询语法必须如下所示:
声明@sqlCommand varchar(100) = 'dbo.p_get_bank_balance' 声明@p1 int = 2
exec @sqlCommand @p1 = @p1
注意:最多有一个数据源与 Direct Query 连接。如果要调用多个SP,只能一个用Direct Query方式,其他用Import方式
尝试使用 导入 而不是直接查询。它可能显示错误,因为您在其中使用了 Temp table。使用子查询创建查询并删除 Temp table 并尝试。或者您可以使用 Import 而不是 Direct Query 它会起作用。