Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Contoh SQL Server UNTUK JSON PATH (T-SQL)

Saat menggunakan SQL Server, Anda dapat menggunakan FOR JSON klausa dalam kueri untuk memformat hasil sebagai JSON. Saat melakukan ini, Anda harus memilih AUTO atau PATH pilihan. Artikel ini berisi contoh penggunaan PATH pilihan.

Sintaks

Sintaksnya seperti ini:

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

Jadi pada dasarnya, yang perlu Anda lakukan hanyalah menambahkan FOR JSON PATH ke akhir kueri Anda.

Contoh 1 – Penggunaan Dasar

Berikut ini contoh untuk didemonstrasikan.

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

Hasil:

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

Jadi hasilnya keluar sebagai dokumen JSON yang diformat dengan baik, bukan dalam baris dan kolom.

Dalam hal ini saya menggunakan TOP 3 untuk membatasi hasil yang disetel menjadi hanya tiga hasil.

Hasil Satu Baris?

Hasil Anda mungkin awalnya muncul dalam satu baris dan satu kolom, dan sebagai satu baris panjang seperti ini:

Jika ini masalahnya, coba klik kumpulan hasil. Bergantung pada perangkat lunak manajemen basis data Anda, ini akan meluncurkan dokumen JSON seperti yang muncul pada contoh di atas.

Apakah ini berfungsi persis seperti yang dijelaskan akan bergantung pada perangkat lunak yang Anda gunakan untuk mengkueri SQL Server.

Pada saat penulisan, ini berfungsi dengan baik untuk saya saat menggunakan SQL Operations Studio (yang telah diubah namanya menjadi Azure Data Studio). Ini juga berfungsi dengan baik saat menggunakan ekstensi MSSQL di VS Code. Namun SSMS hanya memformat hasil sebagai satu baris panjang (meskipun masih dalam format JSON).

Saya juga memiliki berbagai tingkat keberhasilan menggunakan alat baris perintah.

Anda mungkin juga menemukan bahwa hasil awalnya didistribusikan di beberapa baris, tergantung pada seberapa besar kumpulan hasil.

Jika Anda tidak dapat menampilkan hasil dengan cara yang memuaskan, coba alat lain.

Contoh 2 – Kueri di Beberapa Tabel

Dalam contoh ini, saya meminta dua tabel yang memiliki hubungan satu-ke-banyak di antara mereka. Dalam hal ini, setiap artis dapat memiliki banyak album, dan saya menggunakan subkueri untuk mengambil album untuk setiap artis.

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;

Hasil:

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

Dalam hal ini, setiap album telah disarangkan di bawah "Album". Ini karena album dikembalikan melalui subkueri.

Contoh 3 – Output Bersarang dengan Notasi Titik

Saat menggunakan PATH pilihan, Anda dapat menggunakan nama kolom yang dipisahkan titik untuk membuat objek bersarang.

Untuk melakukan ini, gunakan alias yang dipisahkan titik. Ini contohnya:

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

Hasil:

[
    {
        "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"
        }
    }
]

Contoh 4 – Tambahkan Node Root

Anda dapat menggunakan ROOT() opsi untuk menambahkan simpul root ke output. Ini menambahkan satu elemen tingkat atas ke output. Untuk melakukannya, cukup tambahkan ROOT() opsi ke akhir kueri, dengan nama yang Anda inginkan untuk dimiliki oleh simpul akar.

Jadi kita bisa memodifikasi contoh sebelumnya menjadi ini:

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

Hasil:

{
    "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"
            }
        }
    ]
}

Contoh 5 – Hapus Pembungkus Array

Anda dapat menggunakan WITHOUT_ARRAY_WRAPPER opsi untuk menghapus tanda kurung siku yang mengelilingi hasil.

Contoh:

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

Hasil:

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

Perhatikan bahwa jika Anda melakukan ini pada hasil beberapa baris, Anda akan mendapatkan JSON yang tidak valid.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat dan menanyakan server database tertaut di SQL Server?

  2. Apa itu Basis Data dan Sistem Manajemen Basis Data Relasional (RDBMS)

  3. Bagaimana saya bisa mengisi kolom dengan angka acak di SQL? Saya mendapatkan nilai yang sama di setiap baris

  4. Ikhtisar Pernyataan PRINT di SQL Server

  5. Urutkan Peluru di Database