2011-10-06 1 views
1

earlier post에서 SO 기고자의 도움으로 CTE를 사용하는 SQL을 생성했습니다. 나는 테이블을 반환하는 사용자 정의 함수에 SQL을 캡슐화하려고하지만 아래 오류가 발생합니다. 그 라인 8은CTE SELECT를 테이블 값 사용자 정의 함수로 변경

Msg 102, Level 15, State 1, Procedure GetDescendentSteps, Line 8 
Incorrect syntax near ';'. 

참고 : 나는 오류 얻을

Alter FUNCTION GetDescendentSteps 
( 
@StepId INT 
) 
RETURNS TABLE 
AS 
RETURN 
    ;WITH cteRecursion 
     AS (SELECT 
       StepId 
       ,1 AS Level 
      FROM 
       Step 
      WHERE 
       StepId = @StepId 
      UNION ALL 
      SELECT 
       t.StepId 
       ,c.Level + 1 
      FROM 
       Step t 
       INNER JOIN cteRecursion c 
        ON t.ParentStepId = c.StepId 
      ) 
    SELECT 
     StepId,Level 
    FROM 
     cteRecursion 
    ORDER BY 
     Level, 
     StepId; 

: 여기

코드의

;WITH cteRecursion 

가 .. 그리고를 내가에만 SQL 실행하면 그 (변수 @StepId를 리터럴로 대체 한 후) 8 행부터 시작합니다.

또한,이 간단한 예제는 작동 :

ALTER FUNCTION GetDescendentSteps 
( 
@StepId INT 
) 

RETURNS TABLE 

AS 
RETURN 
select 7 As Stepid,1 As Level 

답변

6

처음 ;order by 절을 제거합니다.

관련 문제