2011-04-28 10 views
5

मुझे संग्रहीत प्रक्रिया में इसे निष्पादित करते समय अमान्य ऑब्जेक्ट 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 

उत्तर

10

CTE अगले स्टेटमेंट के लिए ही उपलब्ध है - अपने SELECT......

यह अब उपलब्ध नहीं है बाद में - यही कारण है कि अपने दूसरे DELETE बयान है, जो संदर्भ है कि सीटीई, असफल हो जाएगा।

यदि आपको एक से अधिक एकल कथन के लिए सीटीई के मूल्यों को रखने की आवश्यकता है, तो आपको उन मानों को अस्थायी तालिका/तालिका चर में संग्रहीत करने की आवश्यकता है।

+3

+1। मुझे लगता है कि यह कहना भी वैध होगा कि एक सीटीई वास्तव में * कथन का एक भाग * है जो पहले से है (SQL सर्वर में, वैसे भी)। –

+0

धन्यवाद marc_s और एंड्री –

संबंधित मुद्दे