2011-04-28 2 views
5

저장 프로 시저에서이 작업을 실행하는 동안 Object SubSkillIds 오류가 발생했습니다. 아무도 내가 왜 그렇게하는지 알려 줄 수 있니?저장 프로 시저에서 CTE 작업을 수행하는 동안 잘못된 개체 오류가 발생합니까?

내 오류 메시지가 보이는 같은 : -

메시지 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 

답변

10

열팽창 계수는 다음 명령문에만 사용할 수 있습니다 - 당신의 SELECT......

그것은 더 이상 사용할 수 입니다 나중에 - 그 이유는 두 번째 DELETE 문이있는 참조입니다 해당 CTE가 실패합니다.

둘 이상의 단일 명령문에 대한 CTE 값을 유지해야하는 경우 이러한 값을 임시 테이블/테이블 변수에 저장해야합니다.

+3

+1. 나는 CTE가 실제로 앞선 진술 (SQL Server에서 어쨌든)의 일부라고 말할 수 있다고 생각한다. –

+0

감사합니다. marc_s & Andriy –

관련 문제