T-SQL视图如何从表值函数中选择?

问题描述 投票:0回答:1

视图是否可以从表值函数中选择列?

CREATE FUNCTION fnGetLatestOrderStatus(@OrderId int)
RETURNS TABLE
AS
RETURN 
    SELECT TOP (1) Status, TimestampUtc    
    FROM OrderStatusHistory
    ORDER BY TimestampUtc DESC
GO

CREATE VIEW MyView AS
SELECT  
OrderId,
CustomerId,
fnGetLatestOrderStatus(OrderId).Status AS OrderStatus,
fnGetLatestOrderStatus(OrderId).TimestampUtc AS OrderStatusTimestamp
FROM Orders
GO

SSMS不喜欢此错误

找不到列“ fnGetLatestOrderStatus”或用户定义的函数或聚合“ fnGetLatestOrderStatus”,或者名称不明确。

sql sql-server tsql view user-defined-functions
1个回答
0
投票

这是您想要做的吗?

SELECT o.OrderId, o.CustomerId, flos.*
FROM Orders o CROSS APPLY
     dbo.fnGetLatestOrderStatus(o.OrderId int) flos;

您需要在FROM子句中调用表值函数。


0
投票

如果语法正确,就有可能:)

CREATE VIEW MyView AS
SELECT  
OrderId,
CustomerId,
(select Status from dbo.fnGetLatestOrderStatus(OrderId)) AS OrderStatus,
(select TimestampUtc  from dbo.fnGetLatestOrderStatus(OrderId)) AS OrderStatusTimestamp
FROM Orders
GO
© www.soinside.com 2019 - 2024. All rights reserved.