2017-02-19 2 views
1

이제 다른 방법으로이 작업을 수행 할 수 있는지 확신 할 수 없으므로 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", 또는 이름 중 하나를 찾을 수 없습니다 것은

입니다

을 얻고 뭘하려 모호한

함수로 작업하는 방법에 익숙하지 않아 여러 값을 반환합니다. 여기에 붙어 있습니다.

답변

2

OUTER APPLY를 사용하면 어떨까요? 이 사용에 대한 자세한 내용은 here을 참조하십시오.

SELECT 
    T.* 
     ,NB.NextBookingId 
    FROM #Temp T 
    OUTER APPLY 
    [dbo].fnGetNextBookingForPatient(t.PatientId, @TenantId, T.StartTime) NB