함수 (절대로 암시 된대로 ETL 도구의 제한 사항)를 사용해야하는 OPTION
경우 다중 명령문 테이블 값 함수의 일부로 다음과 같이 지정할 수 있습니다 .
CREATE FUNCTION dbo.udf_MyFunction ( @StartID INT )
RETURNS @tv TABLE
(
id INT
)
AS
BEGIN
WITH Episodes( xlevel, PersonID, EventID, EpisodeID, StartDT, EndDT ) AS (
-- Anchor case - the first EventID for each person.
SELECT 1 AS xlevel, PersonID, EventID, @StartID, StartDT, EndDT
FROM dbo.EventTable
WHERE EventID = @StartID
UNION ALL
SELECT xlevel + 1, et.PersonID, et.EventID, c.EventID + 1, et.StartDT, et.EndDT
FROM Episodes c
INNER JOIN dbo.EventTable et ON c.PersonID = et.PersonID
AND et.EventID = c.EventID + 1
--WHERE c.EventID <= (@StartID + 99)
)
INSERT INTO @tv
SELECT PersonID
FROM Episodes
OPTION ( MAXRECURSION 1000 )
RETURN
END
GO
ETL 도구가 제안하는 것처럼보기에 싸여있을 때도 도움이되었습니다. 이 시스템 전체를 변경할 수있는 방법은 없지만 재귀가 비효율적 일 수 있으므로 이것이 좋은 방법 일 것입니다. OPTION
예제와 같이 인라인 테이블 반환 함수의 본문 내 에서을 사용하여 쿼리 힌트를 지정할 수 없습니다 .
에피소드를 수신하고 출력을 관계형 테이블에 저장할 때 계층 구조를 한 번만 걸도록 프로세스를 변경하십시오. 저장 프로 시저를 사용 하여이 작업을 수행 할 수 있으므로이 제한이 적용되지 않습니다.
또한 코드에 버그가 있다고 생각합니다. CTE가 personId에 가입하고 eventId에 반복되는 경우 eventId 101은 중복으로 생각한 것보다 두 번 나타납니다. 아마도 귀하의 코드를 잘못 해석했을 것입니다. 어떻게 생각하는지 알려주십시오.
HTH