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

JSON PATH उदाहरणों के लिए SQL सर्वर (T-SQL)

SQL सर्वर का उपयोग करते समय, आप FOR JSON . का उपयोग कर सकते हैं परिणामों को JSON के रूप में प्रारूपित करने के लिए एक क्वेरी में क्लॉज। ऐसा करते समय, आपको AUTO . में से किसी एक को चुनना होगा या PATH विकल्प। इस लेख में PATH . का उपयोग करने के उदाहरण हैं विकल्प।

सिंटैक्स

वाक्य रचना इस प्रकार है:

SELECT ...
  (your query goes here)
FOR JSON PATH;

तो मूल रूप से, आपको बस इतना करना है कि FOR JSON PATH . जोड़ें आपकी क्वेरी के अंत तक।

उदाहरण 1 - मूल उपयोग

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है।

USE Music;
SELECT TOP 3 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON PATH;

परिणाम:

[
    {
        "AlbumName": "Powerslave",
        "ReleaseDate": "1984-09-03"
    },
    {
        "AlbumName": "Powerage",
        "ReleaseDate": "1978-05-05"
    },
    {
        "AlbumName": "Singing Down the Lane",
        "ReleaseDate": "1956-01-01"
    }
]

तो परिणाम पंक्तियों और स्तंभों के बजाय एक अच्छी तरह से स्वरूपित JSON दस्तावेज़ के रूप में सामने आते हैं।

इस मामले में मैंने TOP 3 . का इस्तेमाल किया परिणाम को केवल तीन परिणामों तक सीमित करने के लिए।

एकल पंक्ति परिणाम?

आपके परिणाम शुरू में एक ही पंक्ति और एक कॉलम में और इस तरह एक लंबी लाइन के रूप में दिखाई दे सकते हैं:

यदि ऐसा है, तो परिणाम सेट पर क्लिक करने का प्रयास करें। आपके डेटाबेस प्रबंधन सॉफ़्टवेयर के आधार पर, इसे JSON दस्तावेज़ लॉन्च करना चाहिए जैसा कि यह ऊपर के उदाहरण में दिखाई देता है।

क्या यह ठीक वैसे ही काम करता है जैसा कि वर्णित है, यह उस सॉफ़्टवेयर पर निर्भर करेगा जिसका उपयोग आप SQL सर्वर को क्वेरी करने के लिए करते हैं।

लिखने के समय, SQL ऑपरेशंस स्टूडियो का उपयोग करते समय यह मेरे लिए ठीक काम करता था (जिसे बाद में इसका नाम बदलकर Azure Data Studio कर दिया गया)। वीएस कोड में एमएसएसक्यूएल एक्सटेंशन का उपयोग करते समय भी यह ठीक काम करता था। SSMS हालांकि, परिणामों को केवल एक लंबी लाइन के रूप में स्वरूपित करता है (हालाँकि अभी भी JSON प्रारूप में है)।

कमांड लाइन टूल्स का उपयोग करके मुझे सफलता की अलग-अलग डिग्री भी मिलीं।

आप यह भी देख सकते हैं कि परिणाम सेट कितना बड़ा है, इस पर निर्भर करते हुए, परिणाम शुरू में कई पंक्तियों में वितरित किए जाते हैं।

यदि आप संतोषजनक तरीके से परिणाम प्रदर्शित करने के लिए इसे प्राप्त नहीं कर सकते हैं, तो एक अलग टूल आज़माएं।

उदाहरण 2 - एकाधिक तालिकाओं में क्वेरी

इस उदाहरण में, मैं उन दो तालिकाओं को क्वेरी करता हूं जिनके बीच एक-से-अनेक संबंध हैं। इस मामले में, प्रत्येक कलाकार के पास कई एल्बम हो सकते हैं, और मैं प्रत्येक कलाकार के लिए एल्बम पुनर्प्राप्त करने के लिए एक सबक्वेरी का उपयोग करता हूं।

USE Music;
SELECT TOP 2 ArtistName,
    (SELECT AlbumName 
        FROM Albums
        WHERE Artists.ArtistId = Albums.ArtistId
        FOR JSON PATH) AS Albums
FROM Artists
ORDER BY ArtistName
FOR JSON PATH;

परिणाम:

[
    {
        "ArtistName": "AC/DC",
        "Albums": [
            {
                "AlbumName": "Powerage"
            }
        ]
    },
    {
        "ArtistName": "Allan Holdsworth",
        "Albums": [
            {
                "AlbumName": "All Night Wrong"
            },
            {
                "AlbumName": "The Sixteen Men of Tain"
            }
        ]
    }
]

इस मामले में, प्रत्येक एल्बम को "एल्बम" के अंतर्गत नेस्ट किया गया है। ऐसा इसलिए है क्योंकि एल्बम एक सबक्वेरी के माध्यम से लौटाए जाते हैं।

उदाहरण 3 - डॉट नोटेशन के साथ नेस्टेड आउटपुट

PATH . का उपयोग करते समय विकल्प, आप नेस्टेड ऑब्जेक्ट बनाने के लिए डॉट-सेपरेटेड कॉलम नामों का उपयोग कर सकते हैं।

ऐसा करने के लिए, डॉट से अलग किए गए उपनाम का उपयोग करें। यहां एक उदाहरण दिया गया है:

USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH;

परिणाम:

[
    {
        "AlbumId": 1,
        "Details": {
            "Album Name": "Powerslave",
            "Release Date": "1984-09-03"
        }
    },
    {
        "AlbumId": 2,
        "Details": {
            "Album Name": "Powerage",
            "Release Date": "1978-05-05"
        }
    },
    {
        "AlbumId": 3,
        "Details": {
            "Album Name": "Singing Down the Lane",
            "Release Date": "1956-01-01"
        }
    }
]

उदाहरण 4 - एक रूट नोड जोड़ें

आप ROOT() . का उपयोग कर सकते हैं आउटपुट में रूट नोड जोड़ने का विकल्प। यह आउटपुट में एकल, शीर्ष-स्तरीय तत्व जोड़ता है। ऐसा करने के लिए, बस ROOT() जोड़ें क्वेरी के अंत में विकल्प, उस नाम के साथ जिसे आप रूट नोड रखना चाहते हैं।

इसलिए हम पिछले उदाहरण को इसमें संशोधित कर सकते हैं:

USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH, ROOT('Albums');

परिणाम:

{
    "Albums": [
        {
            "AlbumId": 1,
            "Details": {
                "Album Name": "Powerslave",
                "Release Date": "1984-09-03"
            }
        },
        {
            "AlbumId": 2,
            "Details": {
                "Album Name": "Powerage",
                "Release Date": "1978-05-05"
            }
        },
        {
            "AlbumId": 3,
            "Details": {
                "Album Name": "Singing Down the Lane",
                "Release Date": "1956-01-01"
            }
        }
    ]
}

उदाहरण 5 - ऐरे रैपर को हटा दें

आप WITHOUT_ARRAY_WRAPPER . का उपयोग कर सकते हैं परिणामों के चारों ओर वर्गाकार कोष्ठक हटाने का विकल्प।

उदाहरण:

USE Music;
SELECT TOP 1 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

परिणाम:

{
    "AlbumName": "Powerslave",
    "ReleaseDate": "1984-09-03"
}

ध्यान दें कि यदि आप इसे एकाधिक पंक्ति परिणाम पर करते हैं, तो आप अमान्य JSON के साथ समाप्त हो जाएंगे।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IS DISTINCT FROM और IS DISTINCT F से फिर से कैसे लिखा जाए?

  2. SqlBulkCopy के लिए अनुशंसित बैच आकार क्या है?

  3. SQL सर्वर में सभी तालिकाओं को खोजकर एक स्ट्रिंग खोजें

  4. डिक्शनरी पास करें<स्ट्रिंग,इंट>संग्रहीत प्रक्रिया टी-एसक्यूएल

  5. जॉइन क्राइटेरिया में एसक्यूएल फ़िल्टर मानदंड या जहां क्लॉज अधिक कुशल है