Return 数据来自 Table 带连接的值函数

Return Data from Table Valued Function with Joins

我有一个包含 table 值函数的查询。但是当执行这个附加的错误时。我该如何解决?

SELECT bg.Description, im.ERPItemCode,
(select Opening,Topup1,Topup2,Topup3,
 Returnsv,SaleQty,SaleVal from dbo.GetOpeningByRepAcc(@Date,@RepAccId,@Cente![enter image description here][2]rId,im.Id)),
(select Name from dbo.DistributionCenter where Id = @CenterId) as center,
(select Name from dbo.SalesRepAcc where Id = @RepAccId)as repacc    
FROM BudgetGroup AS bg 
INNER JOIN  ItemMaster AS im ON bg.Id = im.BudgetGroupId
WHERE (bg.Active = 1)

这是因为在将 TVF 用作子查询时需要 return 单个列

在您的代码中,您 return Opening,Topup1,Topup2,Topup3,Returnsv,SaleQty,SaleVal 来自您的 TVF

((select Opening,Topup1,Topup2,Topup3,
 Returnsv,SaleQty,SaleVal from dbo.GetOpeningByRepAcc(@Date,@RepAccId,@CenterId,im.Id))

您还需要确保从子查询中只得到一行。您可以将 TOP 1ORDER BY 一起使用以仅获得一行

当您需要 return 来自函数的多个值时,您可以使用 outer apply 而不是子选择:

select
    bg.Description, 
    im.ERPItemCode,
    T1.Opening,
    T1.Topup1,
    T1.Topup2,
    T1.Topup3,
    T1.Returnsv,
    T1.SaleQty,
    T1.SaleVal,
    (select Name from dbo.DistributionCenter where Id = @CenterId) as center,
    (select Name from dbo.SalesRepAcc where Id = @RepAccId)as repacc    
from BudgetGroup AS bg 
    inner join  ItemMaster AS im ON bg.Id = im.BudgetGroupId
    outer apply dbo.GetOpeningByRepAcc(@Date,@RepAccId,@CenterId,im.Id) as T1
where (bg.Active = 1)