Sql server 2005 在存储过程中执行CTE操作时获取无效对象错误?
在存储过程中执行此操作时,我遇到了一个错误,对象SubSkillIds无效?有人能告诉我为什么会这样吗 我的错误消息如下所示:- Msg 208,16级,状态1,程序 删除,第47行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” 代码:
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