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

时间:2018-01-19 07:19:30

标签: sql sql-server tsql sql-function

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

 **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
)

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

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

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