首页 > 解决方案 > 从表值函数中选择?

问题描述

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

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”,或者名称不明确。

标签: sqlsql-servertsqlviewuser-defined-functions

解决方案


这是你想做的吗?

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

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


推荐阅读