2012-03-10 16 views
88

मुझे इस क्वेरी के साथ अधिकतम रिकर्सन त्रुटि मिल रही है।कथन पूरा होने से पहले अधिकतम रिकर्सन 100 समाप्त हो गया है

पहले मैंने सोचा था कि ऐसा इसलिए था क्योंकि एक शून्य वापस लौटाया जा रहा था और फिर यह त्रुटि के कारण शून्य मानों को आजमाएगा और मेल करेगा, हालांकि, मैं अपनी क्वेरी को फिर से लिखता हूं ताकि नल वापस नहीं आ सकें और त्रुटि अभी भी होती है।

इस समारोह के पुनर्लेखन के लिए, ताकि त्रुटि

WITH EmployeeTree AS 
(
    SELECT 
     EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid, 
     CASE Employees.APV_MGR_EMP_ID 
      WHEN Null THEN '0' 
      ELSE Employees.APV_MGR_EMP_ID 
     END as ApprovalManagerId 
    FROM 
     dbo.[tEmployees] as Employees WITH (NOLOCK) 
    WHERE 
     APV_MGR_EMP_ID = @Id 
     and Employees.APV_MGR_EMP_ID is not null 
     and Employees.EMP_SRC_ID_NR is not null 

    UNION ALL 

    SELECT 
     EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid, 
     CASE Employees.UPS_ACP_EMP_NR 
      WHEN Null THEN '1' 
      ELSE Employees.UPS_ACP_EMP_NR 
     END as ApprovalManagerId 
    FROM 
     dbo.[tEmployees] as Employees WITH (NOLOCK) 
    WHERE 
     UPS_ACP_EMP_NR = @Id 
     and Employees.APV_MGR_EMP_ID is not null 
     and Employees.EMP_SRC_ID_NR is not null 

    UNION ALL 

    SELECT 
     Employees.EMP_SRC_ID_NR, Employees.USR_ACV_DIR_ID_TE, 
     CASE Employees.APV_MGR_EMP_ID 
      WHEN Null THEN '2' 
      ELSE Employees.APV_MGR_EMP_ID 
     END 
    FROM 
     dbo.[tEmployees] as Employees WITH (NOLOCK) 
    JOIN 
     EmployeeTree ON Employees.APV_MGR_EMP_ID = EmployeeTree.Id 
    where 
     Employees.APV_MGR_EMP_ID is not null 
     and Employees.EMP_SRC_ID_NR is not null    
) 
SELECT 
    Id AS [EmployeeId], 
    Uuid AS [EmployeeUuid], 
    ApprovalManagerId AS [ManagerId] 
FROM EmployeeTree   

उत्तर

167

घटित नहीं होगा क्वेरी के अंत में maxrecursion option निर्दिष्ट करें सबसे अच्छा तरीका है क्या:

... 
from EmployeeTree 
option (maxrecursion 0) 

आप के लिए अनुमति देता है कि निर्दिष्ट करें कि एक त्रुटि उत्पन्न करने से पहले सीटीई कितनी बार रिकर्स कर सकता है। Maxrecursion 0 अनंत रिकर्सन की अनुमति देता है।

+0

हम्म यह काम किया लेकिन क्वेरी तो एक बहुत अधिक पंक्तियों लौटे यह –

+4

होना चाहिए @bugz Maxrecursion 0 अब आपकी क्वेरी को प्रभावित करता है, आप कहीं और समस्या को देखने के लिए –

+2

है आह उस में एक परिपत्र refrence था मेरा डेटा, मदद के लिए धन्यवाद –

14

यह अधिकतम रिकर्सन त्रुटि से बचने के लिए सिर्फ एक नमूना है। हमें विकल्प (maxrecursion 365) का उपयोग करना होगा; या विकल्प (maxrecursion 0);

DECLARE @STARTDATE datetime; 
DECLARE @EntDt datetime; 
set @STARTDATE = '01/01/2009'; 
set @EntDt = '12/31/2009'; 
declare @dcnt int; 
;with DateList as 
( 
    select @STARTDATE DateValue 
    union all 
    select DateValue + 1 from DateList  
    where DateValue + 1 < convert(VARCHAR(15),@EntDt,101) 
) 
    select count(*) as DayCnt from ( 
    select DateValue,DATENAME(WEEKDAY, DateValue) as WEEKDAY from DateList 
    where DATENAME(WEEKDAY, DateValue) not IN ('Saturday','Sunday')  
)a 
option (maxrecursion 365); 
संबंधित मुद्दे