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

Contoh SQL Server UNTUK JSON AUTO (T-SQL)

Di 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 AUTO pilihan.

Sintaks

Sintaksnya seperti ini:

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

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

Contoh 1 – Penggunaan Dasar

Berikut ini contoh untuk didemonstrasikan.

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

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.

USE Music;
SELECT 
  ArtistName, 
  AlbumName
FROM Artists
  INNER JOIN Albums
    ON Artists.ArtistId = Albums.ArtistId
ORDER BY ArtistName
FOR JSON AUTO;

Hasil:

[
    {
        "ArtistName": "AC/DC",
        "Albums": [
            {
                "AlbumName": "Powerage"
            }
        ]
    },
    {
        "ArtistName": "Allan Holdsworth",
        "Albums": [
            {
                "AlbumName": "All Night Wrong"
            },
            {
                "AlbumName": "The Sixteen Men of Tain"
            }
        ]
    },
    {
        "ArtistName": "Buddy Rich",
        "Albums": [
            {
                "AlbumName": "Big Swing Face"
            }
        ]
    },
    {
        "ArtistName": "Devin Townsend",
        "Albums": [
            {
                "AlbumName": "Ziltoid the Omniscient"
            },
            {
                "AlbumName": "Casualties of Cool"
            },
            {
                "AlbumName": "Epicloud"
            }
        ]
    },
    {
        "ArtistName": "Iron Maiden",
        "Albums": [
            {
                "AlbumName": "Powerslave"
            },
            {
                "AlbumName": "Somewhere in Time"
            },
            {
                "AlbumName": "Piece of Mind"
            },
            {
                "AlbumName": "Killers"
            },
            {
                "AlbumName": "No Prayer for the Dying"
            }
        ]
    },
    {
        "ArtistName": "Jim Reeves",
        "Albums": [
            {
                "AlbumName": "Singing Down the Lane"
            }
        ]
    },
    {
        "ArtistName": "Michael Learns to Rock",
        "Albums": [
            {
                "AlbumName": "Blue Night"
            },
            {
                "AlbumName": "Eternity"
            },
            {
                "AlbumName": "Scandinavia"
            }
        ]
    },
    {
        "ArtistName": "The Script",
        "Albums": [
            {
                "AlbumName": "No Sound Without Silence"
            }
        ]
    },
    {
        "ArtistName": "Tom Jones",
        "Albums": [
            {
                "AlbumName": "Long Lost Suitcase"
            },
            {
                "AlbumName": "Praise and Blame"
            },
            {
                "AlbumName": "Along Came Jones"
            }
        ]
    }
]

Seperti yang Anda lihat, setiap album telah disarangkan di bawah "Album". Ini karena AUTO option menentukan output berdasarkan urutan kolom di SELECT list dan tabel sumbernya.

Contoh 3 – 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
  ArtistName, 
  AlbumName
FROM Artists
  INNER JOIN Albums
    ON Artists.ArtistId = Albums.ArtistId
ORDER BY ArtistName
FOR JSON AUTO, ROOT('Music');

Hasil:

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

Saya juga membatasi hasil yang ditetapkan hanya tiga hasil dengan menambahkan TOP 3 ke kueri.

Contoh 4 – 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 AUTO, 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 saya bisa tahu kapan Populasi Indeks Teks Lengkap SQL selesai?

  2. Karakter Escape di SQL Server

  3. INFORMATION_SCHEMA vs sysobjects

  4. Kesalahan Umum DBA di MS SQL Server

  5. Cara Tercepat untuk Mendaftar Semua Basis Data di SQL Server menggunakan T-SQL