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

Returning table from table-valued function and set that value in temp table

我有一个 table 值函数。我还声明了一个临时 table 中的标量值函数。我想在标量值函数内部执行 table 值函数,并在温度 table 中设置该值,像这样

 **Exec @tempTable=TableValuedFunction**

我该怎么做?

这是 table 值函数

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
)

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

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

然后将 TVF 中的 return 行插入到 table 变量中:

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

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

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