我对用户定义的函数有一些疑问。我想知道为什么/何时使用函数。
函数相对于存储过程有哪些优点?
通过谷歌研究我看到文章建议:
函数的唯一优点是我们可以使用函数作为内联查询。
通过使用临时表,我可以通过存储过程获得相同的结果,但我需要知道与存储过程相比,在哪种情况下使用函数。我需要知道为什么我们需要 UDf ,而 UDF 提供的大部分功能都可以通过存储过程来完成。任何人都可以指导我解决这个问题吗?
主要区别(优点)是您可以内联调用函数,这与存储过程不同,例如
SELECT dbo.fxnFormatName(FirstName, LastName) AS FormattedName
FROM MyTable
SELECT *
FROM dbo.fxnTableReturningFunction() x
Run Code Online (Sandbox Code Playgroud)
用户定义的函数可以返回 TABLE 类型数据,然后可以在查询中调用该函数,如上所示。使用存储过程,您必须执行它并将结果存储到临时表中,以便进一步操作/查询结果集。
另一方面,是的,您在函数中可以执行的操作受到限制。例如,您不能使用动态 sql,并且在 SQL 2005 之前的版本中,您不能在函数中使用像 GETDATE() 这样的非确定性函数。
您可能想要使用函数的一个示例是包装常见的“格式化”功能,如上面第一个示例所示 - 而不是在每个查询中重复将名字和姓氏格式化为一个的逻辑,而是将其包装在一个函数并在任何地方调用它。通常,我建议将格式留给 UI,但这是您可能使用的位置/原因的简单示例。
此外,不必创建临时表来保存存储过程中的结果以便进一步查询它通常会更好。如果存储过程发生更改并返回更多列,您还需要更改将结果加载到临时表中的所有位置,以将用于保存结果的表的架构与返回的新架构同步。使用函数方法不会有这个问题,因为没有需要维护的临时表。
| 归档时间: |
|
| 查看次数: |
10858 次 |
| 最近记录: |