Cha*_*adD 1 t-sql sql-server-2008
在之前的文章中,我构建了一个在SO贡献者的帮助下使用CTE的SQL.我现在想将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;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Msg 102, Level 15, State 1, Procedure GetDescendentSteps, Line 8
Incorrect syntax near ';'.
Run Code Online (Sandbox Code Playgroud)
注意第8行是:
;WITH cteRecursion
Run Code Online (Sandbox Code Playgroud)
..如果我只执行从第8行开始的SQL(在我用文字替换变量@StepId之后).
此外,这个简单的例子有效:
ALTER FUNCTION GetDescendentSteps
(
@StepId INT
)
RETURNS TABLE
AS
RETURN
select 7 As Stepid,1 As Level
Run Code Online (Sandbox Code Playgroud)
删除第一个;和order by子句.
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
Run Code Online (Sandbox Code Playgroud)