Получение недействительной объектной ошибки при выполнении операции CTE в хранимой процедуре? - PullRequest
5 голосов
/ 28 апреля 2011

Я получил ошибку недопустимого объекта SubSkillIds при выполнении этого в хранимой процедуре?Кто-нибудь может дать мне знать, почему это так?

Мое сообщение об ошибке выглядит так: -

Сообщение 208, Уровень 16, Состояние 1, Процедура SubSkillDelete, Строка 47
Недопустимоимя объекта 'SubSkillIds'.

Код:

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 WHERE RegressionSubSkillId
IN (SELECT * FROM SubSkillIds)
DELETE FROM SubSkill WHERE SubSkillId = @SubSkillId

1 Ответ

10 голосов
/ 28 апреля 2011

CTE доступен только для следующего оператора - ваш SELECT......

Это больше не доступен позже - вот почему ваш второй оператор DELETE, который ссылается на этот CTE, не удастся.

Если вам нужно хранить значения CTE для более чем одного оператора, вам нужно сохранить эти значения во временной таблице / табличной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...