加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server:表值函数与存储过程

发布时间:2020-12-12 06:52:20 所属栏目:MsSql教程 来源:网络整理
导读:我一直在阅读有关执行计划和存储过程中动态参数问题的大量内容。我知道建议的解决方案。 不过,我的问题是,我读过的所有内容都表明SQL Server会缓存存储过程的执行计划。没有提到表值函数。我认为它适用于视图(出于兴趣)。 每次调用表值函数时是否重新编译?
我一直在阅读有关执行计划和存储过程中动态参数问题的大量内容。我知道建议的解决方案。

不过,我的问题是,我读过的所有内容都表明SQL Server会缓存存储过程的执行计划。没有提到表值函数。我认为它适用于视图(出于兴趣)。

每次调用表值函数时是否重新编译?

什么时候最好使用表值函数而不是存储过程?

解决方法

内联表值函数(TVF)就像一个宏:它扩展到外部查询。它没有这样的计划:调用SQL有一个计划。

多语句TVF有一个计划(将找到参考)。

如果要改变参数化输入的SELECT列表,TVF非常有用。内联TVF将被扩展,优化者将考虑外部选择/位置。对于多语句TVF,优化实际上是不可能的,因为它必须运行完成,然后过滤。

就个人而言,我会在多语句TVF上使用存储过程。它们更灵活(例如提示,可以更改状态,SET NOCOUNT ON,SET XACTABORT等)。

我不反对内联TVF,但由于无法使用SET和更改状态,因此不倾向于将它们用于面向客户端的代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读