【问题标题】:Parameterise SQL Stored Procedure Excel Get&Transform参数 SQL 存储过程 Excel 获取 & 转换
【发布时间】:2018-10-24 03:11:37
【问题描述】:

我正在尝试将存储选择过程从 SQL Server 调用到 Excel。

在 SSMS 中可以写成

@val1=1;
@val2=2;
Execute SP_DoStuff(@param1=@val1,@param2=@val2);

查看类似的问题,一个常见的答案是连接参数并作为动态 SQL 运行。例如: Use values in cells as parameters in stored procedure in power query editor

答案就在眼前

Source = Sql.Database("xxxxxxxxxxxxxxxxx", "xxxxxxxxxxx", [Query=
"#(lf)#(lf)EXEC#(tab) [dbo].[TestParameter]#(lf)
#(tab)#(tab)@from = '" & YourDateMethod & "'#(lf)
#(tab)#(tab)@isValid = 1,#(lf)
#(tab)#(tab)@someInt = 90"
]) 
in Source 

除非我在这里遗漏了什么,否则由于 YourDateMethod 的字符串连接,这个已建立的方法看起来很容易注入。

有没有一种方法可以安全地将 Excel 中的值输入到参数中?

例如 odbc 允许使用令牌进行准备

Execute SP_DoStuff(@param1=?,@param2=?);

然后喂?作为运行时的值

【问题讨论】:

  • 也许改用 VBA。电源查询方法总是使用连接,比如reevessmith.wordpress.com/2014/08/19/…
  • 请看here
  • 值得注意的是,如果您使用 Excel 连接到一般的 SQL 数据库,那么您天生对任何事物都是开放的。 Excel 不是一个安全的环境,任何有知识或有兴趣操作 SQL 数据库的人都可以轻松地利用 Excel 中连接到数据库的任何排列。 Excel 的目标通常是防止用户意外搞砸任何事情,而不是恶意行事。
  • 谢谢大家。 @Wedge 同意,依靠 Excel 没有完全安全的方法可以做到这一点。即使使用参数,最终用户仍然可以编辑查询或获取明文凭据。在这种情况下,最低权限安全看起来是最好的解决方案。最后,我严格限制了 SQL 用户并使用了字符串连接。

标签: sql-server excel powerquery


【解决方案1】:

您可以使用Value.NativeQuery 编写参数化查询。例如,如果您想要一个只显示名称为 Alice 的列的查询,您可以这样做

Value.NativeQuery(Sql.Database("server", "database"), "select Name from Employees where Name = @myName", [ myName = "Alice" ])

【讨论】:

  • 谢谢,这很有帮助。您在“数据库”之后有一个额外的括号),您可以编辑吗?我无法对 6 个或更少的字符进行小幅编辑。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多