【问题标题】:Best choice among view, function and stored procedure in SQL ServerSQL Server 中视图、函数和存储过程的最佳选择
【发布时间】:2017-01-20 05:14:34
【问题描述】:

如果我想像下面这样写一行代码

SELECT EmpName 
FROM TblEmployee 
WHERE EmpID = 101

输入是固定的。

视图、函数和存储过程中哪个是最佳选择,为什么?

没有任何必要,但我在采访中受到质疑。所以,我想知道。

有人可以帮我吗?

【问题讨论】:

  • 这完全取决于您使用它的目的(而且,我猜,empID 是否是唯一的——您会假设它们是唯一的,但您并不真正知道)。我猜答案是一个(标量)函数,用于 select/where 语句?
  • 理想情况下,也可以查看 MSDN 的页面以了解这些差异。 CREATE FUNCTIONCREATE VIEW 我想你会发现他们在两个对象之间的开场白很有帮助。
  • 我的猜测是,问题的重点不是让你说出最好的,而是看看你是否理解并能够解释视图、过程的差异/用例和一个函数。

标签: sql-server stored-procedures sql-view sql-function


【解决方案1】:

您可以根据需要选择存储过程,因为。

1) 减少服务器/客户端网络流量 过程中的命令作为单批代码执行。这可以显着减少服务器和客户端之间的网络流量,因为只有执行过程的调用是通过网络发送的。如果没有过程提供的代码封装,每一行代码都必须穿越网络。

更强大的安全性 多个用户和客户端程序可以通过一个过程对底层数据库对象执行操作,即使用户和程序对这些底层对象没有直接权限。该过程控制执行哪些流程和活动,并保护底层数据库对象。这消除了在单个对象级别授予权限的要求并简化了安全层。

2)函数的性能比sp慢。

注意:如果您有一个如上所述的选择语句,您最好使用标量函数简单视图

【讨论】:

  • The performance of function is slow when compared to sp 需要引用(特别是对于像这样简单的函数)。
  • 另外,表格和标量函数的用例与简单视图完全不同。我还建议如何轻松地将视图封装在同义词中以增加安全性。尽管 View 本质上是一个独立的查询,但可以为 select 语句中的每一行触发一个标量函数(并不是说 OP 应该随意这样做)。换句话说,它们的用法明显不同。
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多