Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server ЗА JSON AUTO Примери (T-SQL)

В SQL Server можете да използвате FOR JSON клауза в заявка за форматиране на резултатите като JSON. Когато правите това, трябва да изберете или AUTO или PATH опция. Тази статия съдържа примери за използване на AUTO опция.

Синтаксис

Синтаксисът е така:

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

Така че по принцип всичко, което трябва да направите, е да добавите FOR JSON AUTO до края на вашата заявка.

Пример 1 – Основна употреба

Ето пример за демонстрация.

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

Резултат:

[
    {
        "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 Server.

Към момента на писане това работеше добре за мен, когато използвах SQL Operations Studio (което оттогава беше преименувано на Azure Data Studio). Също така работи добре при използване на разширението MSSQL в VS Code. SSMS обаче форматира резултатите само като един дълъг ред (въпреки че все още във формат JSON).

Освен това имах различна степен на успех с помощта на инструменти на командния ред.

Може също така да откриете, че резултатите първоначално са разпределени в няколко реда в зависимост от това колко голям е наборът от резултати.

Ако не можете да го накарате да показва резултатите по задоволителен начин, опитайте друг инструмент.

Пример 2 – Заявка в множество таблици

В този пример правя заявка за две таблици, които имат връзка едно към много между тях. В този случай всеки изпълнител може да има много албуми.

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

Резултат:

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

Както можете да видите, всеки албум е вложен под „Албуми“. Това е така, защото AUTO опцията определя изхода въз основа на реда на колоните в SELECT списък и техните изходни таблици.

Пример 3 – Добавяне на коренен възел

Можете да използвате ROOT() опция за добавяне на главен възел към изхода. Това добавя един единствен елемент от най-високо ниво към изхода. За да направите това, просто добавете ROOT() опция до края на заявката с името, което искате да има основният възел.

Така че можем да модифицираме предишния пример към това:

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');

Резултат:

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

Освен това ограничих набора от резултати до само три резултата, като добавих TOP 3 към заявката.

Пример 4 – Премахване на обвивката на масива

Можете да използвате WITHOUT_ARRAY_WRAPPER опция за премахване на квадратните скоби, които обграждат резултатите.

Пример:

USE Music;
SELECT TOP 1 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON AUTO, 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. Какво представляват данни и информация и обеми данни

  2. Кой е най-добрият начин за внедряване на полиморфна асоциация в SQL Server?

  3. Най-добрият инструмент за възстановяване на SQL за 2020 г. за възстановяване на важна SQL база данни

  4. Как да създам уникално ограничение, което също позволява нулеви стойности?

  5. CAST(DATETIME КАТО ДАТА) над клаузата WHERE