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

रिकर्सिव सीटीई एसक्यूएल पदानुक्रम स्तर के लिए के साथ

आपने हमें यह नहीं बताया कि आप कैसे जानते हैं कि किसी उपयोगकर्ता के पास दी गई आईडी पर अधिकार हैं या नहीं। यह एक आवश्यक जानकारी है। मैं नीचे कुछ कोड डालने जा रहा हूं जो मानता है कि आप hasRights नामक अपनी क्वेरी में एक कॉलम जोड़ते हैं और यह कि यदि उपयोगकर्ता के पास अधिकार नहीं हैं तो इस कॉलम का शून्य मान होगा और यदि वे ऐसा करते हैं तो एक का मान होगा। आपको इसे संशोधित करने की आवश्यकता हो सकती है, क्योंकि मेरे पास परीक्षण करने के लिए कोई डेटा नहीं है, लेकिन उम्मीद है कि यह आपको करीब लाएगा।

मूल रूप से, यदि उपयोगकर्ता के पास अधिकार हैं तो क्वेरी को केवल स्तर में 1 जोड़ने के लिए बदल दिया जाता है। यदि उपयोगकर्ता के पास अधिकार हैं तो यह केवल सॉर्ट पथ में जोड़ता है, अन्यथा एक खाली स्ट्रिंग जोड़ दी जाती है। इसलिए, यदि आईडी 8 और 9 केवल वे आइटम हैं जिन तक उपयोगकर्ता की पहुंच है, तो आपको 1 और 2 के स्तर देखना चाहिए और '5/6/8/9' के बजाय '5/8/9' के समान पथों को क्रमबद्ध करना चाहिए। यदि आप अभी भी इसे काम करने में सक्षम नहीं हैं, तो यदि आप SqlFiddle पर एक नमूना स्कीमा पोस्ट करते हैं तो इससे हमें बहुत मदद मिलेगी।

WITH Tree
AS (
SELECT
    id,
    parent,
    0 AS Level,
    id AS Root,
    hasRights AS HasRights,
    CAST(id AS VARCHAR(MAX)) AS Sort,
    user_id
FROM SourceTable
WHERE parent IS NULL

UNION ALL

SELECT 
    st.id,
    st.parent,
    Level + st.hasRights AS Level,
    st.parent AS Root,
    st.hasRights AS HasRights,
    uh.sort + CASE st.hasRights WHEN 0 THEN '' ELSE '/' + CAST(st.id AS VARCHAR(20)) END AS Sort,
    st.user_id
FROM SourceTable AS st
    JOIN Tree uh ON uh.id = st.parent    
)

SELECT * FROM Tree AS t
    JOIN UserTable AS ut ON  ut.id = t.user_id AND ut.user_id = '141F-4BC6-8934'
ORDER BY Sort


  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. Windows 7 में व्यवस्थापक उपयोगकर्ता के लिए SQL Server 2008 डेटाबेस इंजन लॉगिन विफल रहा

  3. SQL सर्वर प्रबंधन स्टूडियो में फ़्लोटिंग पॉइंट प्रकारों का पूर्ण सटीक आउटपुट

  4. SQL सर्वर में लॉजिकल और ऑपरेटर क्या है - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 120

  5. JSON_VALUE () SQL सर्वर में उदाहरण (T-SQL)