Nieuwe en verbeterde JSON-functies
De toevoeging van drie nieuwe functies en de verbetering van ISJSON in SQL Server 2022 helpt ontwikkelaars efficiënter en eenvoudiger met JSON-objecten te werken. Deze functies helpen te voldoen aan de toenemende behoefte aan betere verwerking van populaire gegevensindelingen in toepassingen en API's.
JSON_OBJECT
De functie JSON_OBJECT
maakt een JSON-object door sleutel-waardeparen op te geven. Het vereenvoudigt het proces van het maken van JSON-objecten op basis van queryresultaten.
ISJSON
De functie ISJSON
controleert of de invoertekenreeks geldige JSON bevat en retourneert 1 indien waar en 0 als deze onwaar is. In SQL Server 2022 is de functie uitgebreid ter ondersteuning van json_type_constraint
, zodat u kunt controleren op de JSON-typen VALUE
, ARRAY
, OBJECT
of SCALAR
.
JSON_PATH_EXISTS
De functie JSON_PATH_EXISTS
controleert of er een specifiek JSON-pad bestaat in een JSON-tekenreeks en retourneert 1 indien waar en 0 indien onwaar. Deze functie is handig voor het controleren van de aanwezigheid van eigenschappen in JSON-gegevens.
JSON_ARRAY
Met de functie JSON_ARRAY
wordt een JSON-matrix samengesteld door elementen op te geven. Het vereenvoudigt het proces van het converteren van gegevens naar JSON-matrices, wat handig is bij het werken met API's of apps waarvoor JSON-matrices zijn vereist.
JSON-verwerking vereenvoudigen met JSON_OBJECT en JSON_PATH_EXISTS
Stel dat u een DBA bent voor een grote financiële instelling. Uw IT-afdeling heeft een bewakingssoftware voor het hele netwerk geïnstalleerd. De software heeft een database gemaakt met de naam CollectionDB. Als u de querystatistieken van uw SQL-servers wilt bewaken, bevat deze database een tabel met de naam QueryRequestStats met de kolommen CollectionTime, ServerName, session_id en QueryStats. De kolom QueryStats moet de JSON-indeling hebben. U moet het verzamelingsscript maken waarmee deze tabel elke 5 minuten wordt gevuld met de querytekst, het plan en de algemene statistieken. Als u de overhead wilt minimaliseren, besluit u alleen niet-slaapstand en niet-achtergrond te verzamelen. Daarnaast vraagt uw team om een query uit te voeren op deze tabel waarmee de top 10 aanvragen worden geretourneerd, gesorteerd op CPU-gebruik, waarbij de querytekst is ingevuld voor de verzamelingsdatum en tijdstip van 2023-03-29 12:54:00.000
. Voer de volgende query's uit in SQL Server Management Studio (SSMS) om deze gegevens op te slaan en op te halen.
-- Query to collect data, run it every 5 minutes
INSERT INTO CollectionDB.dbo.QueryRequestStats
SELECT GETDATE() AS CollectionTime
, @@ServerName AS ServerName
, er.session_id
, JSON_OBJECT ('session_id':er.session_id
, 'status':er.status
, 'command':er.command
, 'performanceCounters':JSON_OBJECT(
'cpu':er.cpu_time
, 'duration':er.total_elapsed_time
, 'reads':er.logical_reads
)
, 'sql_text':JSON_OBJECT (
'text': est.text
, 'starting_offset':er.statement_start_offset
, 'ending_offset':er.statement_end_offset
)
, 'query_plan':eqp.query_plan
) AS QueryStats
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) eqp
WHERE er.status NOT IN ('sleeping', 'background')
AND session_id > 50
AND session_id != @@SPID
-- Query to return the top 10 requests by CPU usage that have a query text for the collection time `2023-03-29 12:54:00.000`
SELECT *
FROM CollectionDB.dbo.QueryRequestStats
WHERE JSON_PATH_EXISTS(QueryStats, '$.sql_text.text') = 1
AND JSON_VALUE(QueryStats, '$.sql_text.text') IS NOT NULL
AND CollectionTime = '2023-03-29 12:54:00.000'
ORDER BY CAST(JSON_VALUE(QueryStats, '$.performanceCounters.cpu') AS INT) DESC
Als u de gegevens wilt verzamelen, ziet u hoe we de querystatistieken verzamelen in de kolom QueryStats als JSON met behulp van de functie JSON_OBJECT
functie. Bovendien maken we ook twee JSON-eigenschappen in de verzameling, performanceCounters en sql_text, ook met behulp van de functie JSON_OBJECT
.
Om de gegevens weer te geven, gebruiken we JSON_PATH_EXISTS
en JSON_VALUE
om ervoor te zorgen dat als de eigenschap bestaat, die sql_text.text
niet leeg is.
Het verzamelen van prestatiegegevens en het converteren ervan naar JSON is slechts een van de talloze scenario's die grotendeels kunnen profiteren van deze functies. Dankzij de toevoeging en verbetering van JSON-functies in SQL Server 2022 kunnen gebruikers eenvoudiger met JSON-objecten werken, zodat ze beter kunnen omgaan met populaire gegevensindelingen die vaak worden gebruikt in de huidige toepassingen en API's.