2017-04-02 1 views
1

이 유형의 선택 쿼리 (의사 코드)를 사용할 수 없습니다. UDF는 제공된 'UID_VEHICLE'에 대해 단일 행에 8 개의 컬럼이있는 테이블을 리턴합니다. 'UID_VEHICLE'이 3308과 같은 상수로 제공 될 때 완벽하게 작동합니다. 그러나 주어진 고객을 위해 각 차량에 대해이 함수 결과 중 하나의 행이 필요합니다. 최대 100 개의 행이 반환됩니다.SQL Server 사용자 정의 함수가 테이블을 반환합니다. 선택한 쿼리에서이 테이블을 호출 할 수 없습니다.

SELECT 
    * 
FROM 
    [dbo].[fnGetNextDOT_InspectionData](UID_VEHICLE) 
WHERE 
    UID_VEHICLE IN (SELECT UID_VEHICLE 
        FROM tVEHICLES 
        WHERE UID_CUSTOMER = 88); 

여러분의 의견과 해결책은 ... 존

오신 것을 환영합니다 ... 덕분에

답변

1

TVF에 쿼리에서 행 값을 전달하는 경우 (SQL 서버 2005로 시작), 당신은 CROSS APPLY 또는 OUTER APPLY를 사용할 필요가 :

SELECT * -- or dot.*, or whatever is desired 
FROM  tVEHICLES veh 
CROSS APPLY [dbo].[fnGetNextDOT_InspectionData](veh.UID_VEHICLE) dot 
WHERE veh.UID_CUSTOMER = 88; 
+0

우수한! 이것은 대답이지만 사소한 변화와 함께 .SELECT dot. * ... 대단히 감사합니다 - 당신은 매우 영리합니다! –

+0

@ JohnD Yer 환영합니다. 답변을 업데이트했습니다. 나는 당신이 필요로하는 컬럼을 알지 못했고 필요에 따라'SELECT '를 변경할 것이라고 생각했기 때문에 처음에는 그것을 포함하지 않았다. –

+0

@srutzky ... 친애하는 선생님 ... 내가 대답으로 표시했는데 대답 해 주셔서 감사합니다. 결과 세트를 자세히 살펴보면서 교차로를 바깥쪽으로 설정하고 모든 차량이 아닌 것을 발견했습니다. 고객 = 88이 반환됩니다. 어떤 아이디어? –

관련 문제