从表值函数返回表并在临时表中设置该值

Posted

技术标签:

【中文标题】从表值函数返回表并在临时表中设置该值【英文标题】:Returning table from table-valued function and set that value in temp table 【发布时间】:2018-06-28 09:21:37 【问题描述】:

我有一个表值函数。我还声明了一个临时表,其中有标量值函数。我想在标量值函数中执行表值函数,并在临时表中设置该值,就像这样

 **Exec @tempTable=TableValuedFunction**

我该怎么做?

这里是表值函数

ALTER FUNCTION [dbo].[fn_Functiont]()
RETURNS TABLE 
AS
RETURN 
(   
SELECT d.*, b.Name AS Name, ps.Name AS PaymentSystemName, c.UserName AS UserName, c.FirstName AS ClientFirstName, c.LastName AS LastName, c.Number AS DocumentNumber, c.Id
FROM Document AS d
JOIN System AS ps ON d.SystemId = ps.Id
JOIN Client AS c ON c.Id = d.ClientId
LEFT JOIN Shop AS b ON b.Id = d.ShopId
WHERE d.OperationTypeId IN (2, 4, 5) AND c.Type = 1
)

【问题讨论】:

您的 TVF 结果如何? 看上面我已经编辑了我的帖子 【参考方案1】:

使用这种方法,您需要提前定义表变量。如果数据量很大,表变量对性能也不是很好。 根据我的经验,您应该使用临时表而不是表变量。通过这种方法,我们还可以避免创建表的脚本。

SELECT * INTO #TempVariable FROM [dbo].[fn_Functiont]() 

【讨论】:

【参考方案2】:

首先,您需要在 TVF 的结果中有一个结构相同(或取决于您想要的列)的表变量。示例:

DECLARE @tempTable AS TABLE 
(
   .. columns here ...
)

然后将从 TVF 返回的行插入到表变量中:

INSERT INTO @tempTable
SELECT * FROM [dbo].[fn_Functiont]()

【讨论】:

以上是关于从表值函数返回表并在临时表中设置该值的主要内容,如果未能解决你的问题,请参考以下文章

在表值函数中使用临时表

sql 表表达式 - 视图,临时表,表变量,派生表,表值函数,公用表表达式(CTE)

如何从 TempTable 中检索值并在局部变量中设置该值

子查询 X 临时表 X 动态 sql X 表值函数

postgresql中带有临时表的存储函数

如何将多个选择语句插入临时表