В более раннем посте я создал SQL, который использует CTE с помощью участника SO. Теперь я хотел бы инкапсулировать этот SQL в пользовательскую функцию, которая возвращает таблицу, но я получаю сообщение об ошибке ниже.
Вот код:
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;
Я получаю ошибку:
Msg 102, Level 15, State 1, Procedure GetDescendentSteps, Line 8
Incorrect syntax near ';'.
Обратите внимание, что строка 8:
;WITH cteRecursion
.. и что если я выполню только SQL, начинающийся со строки 8 (после замены переменной @StepId на литерал).
Также работает этот простой пример:
ALTER FUNCTION GetDescendentSteps
(
@StepId INT
)
RETURNS TABLE
AS
RETURN
select 7 As Stepid,1 As Level