Sql 用户定义函数相对于存储过程的优势
我对用户定义的函数有些怀疑。我想知道为什么/何时使用函数 与存储过程相比,函数有哪些优点 通过谷歌搜索,我看到一些文章建议:Sql 用户定义函数相对于存储过程的优势,sql,sql-server,Sql,Sql Server,我对用户定义的函数有些怀疑。我想知道为什么/何时使用函数 与存储过程相比,函数有哪些优点 通过谷歌搜索,我看到一些文章建议: 存储过程比函数更有利 函数具有有限的错误处理 函数不能使用临时表 函数不能调用存储过程 函数的唯一优点是我们可以使用函数作为内联查询 通过使用临时表,我可以获得与存储过程相同的结果,但我需要知道与存储过程相比,使用函数的场景是什么。 我需要知道为什么我们需要UDf,而UDf提供的大部分功能都可以通过存储过程完成。 有谁能给我指点一下。主要的区别(优点)是,您可以内联调
- 存储过程比函数更有利
- 函数具有有限的错误处理
- 函数不能使用临时表
- 函数不能调用存储过程
另外,不必创建临时表来保存存储过程的结果以便进一步查询,这通常会更好。如果存储过程更改并返回更多列,则还需要更改将结果加载到临时表中的所有位置,以便将用于保存结果的表的架构与返回的新架构同步。函数方法没有这个问题,因为没有要维护的临时表。有三种类型的函数:标量、内联表和表值。一般来说,标量和表值函数可能会导致性能问题,因为查询优化程序在优化这些类型函数的使用方面做得不是很好。然而,内联表函数的性能还不错 此处存在创建新类型标量函数的Connect请求:
我希望人们会投票支持这一点,因为它将通过允许查询优化程序内联函数表达式和利用统计信息等大大提高性能,就像对普通查询一样。用户定义函数的主要“缺点”是每行都会调用它们。因此,如果您在选择列表中有这样一个函数,并且您在较大的集合上操作,那么您的性能很可能会受到影响 Mysql存储过程的优势
不完全正确。这取决于我们的SQL Server版本,您是否可以在函数中使用GETDATE()之类的东西……但您是否能够在SELECT子句中包含存储过程……如果不能,那么在比较两者时,这是一个什么缺点?
SELECT dbo.fxnFormatName(FirstName, LastName) AS FormattedName
FROM MyTable
SELECT *
FROM dbo.fxnTableReturningFunction() x