Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

सीटीई रिकर्सन गहराई को कैसे सीमित करें लेकिन जेनेरिक टेबल का चयन करें?

यदि आप अपने स्तर के क्षेत्र के साथ केवल इतना करना चाहते हैं कि रिकर्सन की संख्या सीमित है, तो आपको MAXRECURSION क्वेरी संकेत , कुछ इस तरह:

WITH Department_CTE AS
(
    SELECT
        DepartmentGroupKey,
        ParentDepartmentGroupKey,
        DepartmentGroupName
    FROM dimDepartmentGroup
    WHERE DepartmentGroupKey = 2
    UNION ALL
    SELECT
        Child.DepartmentGroupKey,
        Child.ParentDepartmentGroupKey,
        Child.DepartmentGroupName
    FROM Department_CTE AS Parent
        JOIN DimDepartmentGroup AS Child
            ON Parent.ParentDepartmentGroupKey = Child.DepartmentGroupKey
)
SELECT * FROM Department_CTE
OPTION (MAXRECURSION 2)

संपादित करें:

टिप्पणियों में प्रश्न के उत्तर में, नहीं, आप अपनी MAXRECURSION सेटिंग की अनुमति से अधिक बार रिकर्स करते समय प्राप्त होने वाली त्रुटि को दबा नहीं सकते। अगर मैं आपको सही ढंग से समझूं, तो आप कुछ ऐसा कर सकते हैं:

WITH CTE AS
(
    -- Start CTE off by selecting the task that was provided to stored procedure.
    SELECT Id, 0 as [Level]
    FROM [dbo].[TestTable]
    WHERE [Id] = 1
    -- Recursively add tasks that are children of parent tasks that have already been found in previous iterations.
    UNION ALL
    SELECT t.Id, [Level] + 1
    FROM [dbo].[TestTable] as t
    INNER JOIN CTE as tcte
        ON t.[ParentId] = tcte.[Id]
    WHERE [Level] < 2
),
CTE2 AS
(
    SELECT TestTable.*
    FROM CTE
        INNER JOIN TestTable ON CTE.Id = TestTable.Id
)
SELECT * FROM CTE2;

यह उतना ही सामान्य होना चाहिए जितना आपके ऊपर है, यह मानते हुए कि आप पदानुक्रम या प्राथमिक कुंजी फ़ील्ड को बदलने की योजना नहीं बना रहे हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. शेपफाइल से 'प्वाइंट' कॉलम को स्टोर करना

  2. SQL सर्वर में SYSUTCDATETIME () बनाम GETUTCDATE ():क्या अंतर है?

  3. मैं SQL सर्वर ब्राउज़र प्रारंभ नहीं कर सकता

  4. यदि कोई SQL सर्वर जॉब पहले से चल रहा है तो क्या एक निर्धारित रन को छोड़ देगा?

  5. SQL सर्वर में LEFT SEMI JOIN कैसे करें?