"Functions vs Stored Procedures"(功能函数与存储过程)

21 浏览
0 Comments

"Functions vs Stored Procedures"(功能函数与存储过程)

假设我需要实现一段T-SQL代码,必须返回一个表作为结果。我可以实现一个表值函数,或者返回一组行的存储过程。我该使用哪个?

简而言之,我想知道:

函数和存储过程之间的主要区别是什么?在使用一个或另一个时应考虑哪些因素?

admin 更改状态以发布 2023年5月23日
0
0 Comments

函数必须是确定性的,不能用于对数据库进行更改,而存储过程允许您进行插入和更新等操作。

您应该限制使用函数,因为它们对于大型、复杂查询会带来巨大的可扩展性问题。它们变成了查询优化器的“黑匣子”,使用函数和将代码直接插入查询之间的性能差异巨大。

但是,它们在特定情况下的表值返回绝对有用。

如果您需要解析逗号分隔的列表,以模拟将数组传递给存储过程,函数可以将列表转换为表格。这是 Sql Server 2005 中常见的做法,因为我们尚不能将表格传递给存储过程(但我们可以使用 2008 版本)。

0
0 Comments

如果您想将此代码片段的结果与其他表合并,那么表值函数显然将允许您在单个SELECT语句中组合结果。

通常,存在层次结构(视图 < TV函数 < 存储过程)。每个层次可以做更多的事情,但随着功能的增加,组合输出的能力和优化器的参与程度会降低。

因此,请尽量使用最少量的方法来表达所需的结果。

0