Sql server 2005 在存储过程中执行CTE操作时获取无效对象错误?

Sql server 2005 在存储过程中执行CTE操作时获取无效对象错误?,sql-server-2005,Sql Server 2005,在存储过程中执行此操作时,我遇到了一个错误,对象SubSkillIds无效?有人能告诉我为什么会这样吗 我的错误消息如下所示:- Msg 208,16级,状态1,程序 删除,第47行 无效的对象名称“SubSkillIds” 代码: CTE仅适用于下一条语句-您的选择… 它以后不再可用,这就是为什么引用该CTE的第二条DELETE语句将失败的原因 如果需要为多个语句保留CTE值,则需要将这些值存储到临时表/表变量中。+1。我认为也可以说CTE实际上是它前面的语句的一部分(无论如何,在SQL Se

在存储过程中执行此操作时,我遇到了一个错误,对象SubSkillIds无效?有人能告诉我为什么会这样吗

我的错误消息如下所示:-

Msg 208,16级,状态1,程序 删除,第47行
无效的对象名称“SubSkillIds”

代码:


CTE仅适用于下一条语句-您的
选择…

它以后不再可用,这就是为什么引用该CTE的第二条
DELETE
语句将失败的原因


如果需要为多个语句保留CTE值,则需要将这些值存储到临时表/表变量中。

+1。我认为也可以说CTE实际上是它前面的语句的一部分(无论如何,在SQL Server中)。
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