下一个预订记录功能和表格

时间:2017-02-19 06:58:02

标签: sql sql-server tsql sql-server-2014

现在我正在尝试在UDF的帮助下找到患者的下一个可用预订,因为我不确定我是否可以通过其他方式执行此操作。

这是我的UDF:

CREATE FUNCTION [dbo].[fnGetNextBookingForPatient] 
     (@PatientId BIGINT,
      @BookingStartTime SMALLDATETIME)
RETURNS TABLE
AS
    RETURN 
        (SELECT TOP 1 
             BookingId As NextBookingId,
             C.Color As NextBookingCatColor,
             C.CategoryName As NextBookingCatName,
             b.StartTime As NextBookingTime
         FROM 
             dbo.Booking B
         INNER JOIN 
             Category C ON c.CategoryId = b.CategoryId
         WHERE 
             B.StartTime > @BookingStartTime
             AND b.PatientId = @PatientId
             AND ISNULL(B.IsCancelled, 0) = 0
             AND ISNULL(B.IsDeleted, 0) = 0
         ORDER BY 
             B.StartTime
    )

我需要获取临时表中可用的每条记录的下一个预订信息

当前临时表

PatientId| BookingId         |         BookingTime
---------+-------------------+---------------------
1235     | 15585             | 2017-02-19 08:00:00

预期临时表

PatientId| BookingId |  BookingTime |     NextBookingId|  NextBookingTime
---------+-----------+--------------------+------------+-----------------
1235     | 15585     | 2017-02-19 08:00:00 | 16522      | 2017-02-23 11:00:00

这就是我试过的

SELECT 
    *,
    dbo.fnGetNextBookingForPatient(PatientId, @TenantId, StartTime)
FROM 
    #Temp
ORDER BY 
    StartTime ASC

我收到错误

  

找不到任何一列" dbo"或用户定义的函数或聚合" dbo.fnGetNextBookingForPatient",或名称不明确

由于我不熟悉如何使用函数返回多个值,我被困在这里。

1 个答案:

答案 0 :(得分:2)

使用OUTER APPLY怎么样?有关使用此

的详细信息,请阅读here
    SELECT 
     T.*
        ,NB.NextBookingId
    FROM #Temp T
    OUTER APPLY 
    [dbo].fnGetNextBookingForPatient(t.PatientId, @TenantId, T.StartTime) NB