现在我正在尝试在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",或名称不明确
由于我不熟悉如何使用函数返回多个值,我被困在这里。
答案 0 :(得分:2)
使用OUTER APPLY怎么样?有关使用此
的详细信息,请阅读here SELECT
T.*
,NB.NextBookingId
FROM #Temp T
OUTER APPLY
[dbo].fnGetNextBookingForPatient(t.PatientId, @TenantId, T.StartTime) NB