开发者

Getting an invalid Object error while doing CTE operation in Stored procedure?

I got an error invalid Object SubSkillIds while executing this in a stored procedure? Can anybody let me know why is it so?

My error message looks like:-

Msg 208, Level 16, State 1, Procedure SubSkillDelete, Line 47

Invalid object name 'SubSkillIds'.

Code:

WITH SubSkillIds (SubSkillId) AS
(
   -- Base case
   SELECT
        SubSkillId
   FROM dbo.SubSkill
   WHERE RegressionSubSkillId = @SubSkillId
   UNION ALL
   -- Recursive step
   SELECT
        S.SubSkillId
   FROM dbo.SubSkill S
   WHERE S.RegressionSubSkillId IN (
   SELECT
        SubSkillId
   FROM dbo.SubSkill
   WHERE RegressionSubSkillId = @SubSkillId)
)

SELECT  @SubSkillIdFound = SubSkillId
FROM SubSkill WHERE SubSkillId = @SubSkillId

DELETE FROM SubSkillActivity WHERE SubSkillId = @SubSkillId
DELETE FROM SubSkill WHE开发者_JAVA技巧RE RegressionSubSkillId
IN (SELECT * FROM SubSkillIds)
DELETE FROM SubSkill WHERE SubSkillId = @SubSkillId


The CTE is only available for the next statement - your SELECT......

It is no longer available later on - that's why your second DELETE statement, which references that CTE, will fail.

If you need to keep the values of the CTE around for more than one single statement, you need to store those values into a temporary table / table variable.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜