SQL Server - 将表传递给函数......如何?这是个好主意吗?

Posted

技术标签:

【中文标题】SQL Server - 将表传递给函数......如何?这是个好主意吗?【英文标题】:SQL Server - Passing a table to a function... how? and is it a good idea? 【发布时间】:2013-12-18 18:29:30 【问题描述】:

我有一个查询我的一张表的存储过程。我希望它向该表添加另一列,其值由函数计算。

该函数是另一个带有子查询的查询,它基于另一个表中的用户数据。

现在由于有很多行需要计算,我认为该函数会一遍又一遍地为每一行查询相同的数据。

我想我可能会在存储过程中查询函数所需的数据并将其保存在临时表中,然后将该表传递给函数,以便函数实际查询内存中的小表,而不是查询真正的桌子——这样可以让它更快,而且我的真实桌子上没有太多的 IO。

我的问题实际上是两部分:

    我说的有道理吗?它是一个很好的解决方案,可以让它更快、更高效吗?还是将表数据传递给函数需要很高的成本? 如何将表传递给函数?

谢谢

编辑:

顺便说一句 - 这是一个标量函数

【问题讨论】:

部分取决于功能;它是标量还是表函数?如果是表函数,它是内联的还是多值的? 对不起,我应该提到它。这是一个标量函数。 当您以标准的顺序编码方式思考时,您的问题更有意义,SQL 思考通常需要其他方式——我无法从您所说的内容中看出,但是一个视图甚至只是一个更好的查询可以做同样的计算,因为函数可能会更好更快。 我很害怕 :)。您可以将其重写为内联 TVF 或视图吗?这是我要开始的第一个地方...... 简短的回答是每行需要执行一次标量(和多值 TVF),而内联 TVF 是基于集合的。 ***.com/questions/4447346/… 【参考方案1】:

您可以在 MS SQL Server 2008 及更高版本上的存储过程或函数中使用表值参数:

http://technet.microsoft.com/en-us/library/bb510489.aspx

【讨论】:

以上是关于SQL Server - 将表传递给函数......如何?这是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程? [复制]

如何动态地将表名传递给 PL SQL 游标?

每个将表名传递给过程的 ORACLE PL/SQL

将表名作为参数传递时 PL/SQL 函数不起作用

将表名传递给函数并返回表

将表传递给 postgreSQL 函数,执行 select 语句,返回表