JSON-Daten in SQL ServerJSON data in SQL Server

GILT FÜR: jaSQL Server (ab 2016) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

JSON ist ein beliebtes Textdatenformat, das zum Austauschen von Daten in modernen Webanwendungen und mobilen Anwendungen verwendet wird.JSON is a popular textual data format that's used for exchanging data in modern web and mobile applications. JSON wird auch zum Speichern von unstrukturierten Daten in Protokolldateien oder NoSQL-Datenbanken wie Microsoft Azure Cosmos DB verwendet.JSON is also used for storing unstructured data in log files or NoSQL databases such as Microsoft Azure Cosmos DB. Viele REST-Webdienste geben Ergebnisse zurück, die als JSON-Text formatiert sind, oder akzeptieren Daten, die im JSON-Format formatiert sind.Many REST web services return results that are formatted as JSON text or accept data that's formatted as JSON. Beispielsweise verfügen die meisten Azure-Dienste wie Azure Search, Azure Storage und Azure Cosmos DB über REST-Endpunkte, die JSON zurückgeben oder verarbeiten.For example, most Azure services, such as Azure Search, Azure Storage, and Azure Cosmos DB, have REST endpoints that return or consume JSON. JSON ist auch das hauptsächliche Format zum Austauschen von Daten zwischen Webseiten und Webservern über AJAX-Aufrufe.JSON is also the main format for exchanging data between webpages and web servers by using AJAX calls.

JSON-Funktionen in SQL Server ermöglichen Ihnen, NoSQL und relationale Konzepte in der gleichen Datenbank zu kombinieren.JSON functions in SQL Server enable you to combine NoSQL and relational concepts in the same database. Sie können übliche relationale Spalten mit anderen Spalten kombinieren, die Dokumente enthalten, die als JSON-Text in der gleichen Tabelle formatiert sind, JSON-Dokumente analysieren und in relationale Strukturen importieren oder relationale Daten zu JSON-Text formatieren.Now you can combine classic relational columns with columns that contain documents formatted as JSON text in the same table, parse and import JSON documents in relational structures, or format relational data to JSON text. Im folgenden Video sehen Sie, wie NoSQL- und relationale Konzepte in SQL Server und Azure SQL-Datenbanken durch JSON-Funktionen verbunden werden:You see how JSON functions connect relational and NoSQL concepts in SQL Server and Azure SQL Database in the following video:

JSON as a bridge between NoSQL and relational worldsJSON as a bridge between NoSQL and relational worlds

Hier ist ein Beispiel des JSON-Texts:Here's an example of JSON text:

[{
    "name": "John",
    "skills": ["SQL", "C#", "Azure"]
}, {
    "name": "Jane",
    "surname": "Doe"
}]

Durch Verwenden von integrierten SQL Server-Funktionen und -Operatoren können Sie die folgenden Aktionen mit JSON-Text ausführen:By using SQL Server built-in functions and operators, you can do the following things with JSON text:

  • Analysieren Sie JSON-Text und lesen oder ändern Sie Werte.Parse JSON text and read or modify values.
  • Wandeln Sie Arrays von JSON-Objekten in das Tabellenformat um.Transform arrays of JSON objects into table format.
  • Wenden Sie eine beliebige Transact-SQL-Abfrage auf die konvertierte JSON-Objekte an.Run any Transact-SQL query on the converted JSON objects.
  • Formatieren Sie die Ergebnisse der Transact-SQL-Abfragen in das JSON-Format.Format the results of Transact-SQL queries in JSON format.

Übersicht über die integrierte Unterstützung für JSONOverview of built-in JSON support

Wichtige JSON-Funktionen von SQL Server und SQL-DatenbankKey JSON capabilities of SQL Server and SQL Database

In den nächsten Abschnitten werden die wichtigsten Funktionen erläutert, die SQL Server durch die integrierte Unterstützung für JSON bereitstellt.The next sections discuss the key capabilities that SQL Server provides with its built-in JSON support. Im folgenden Video sehen Sie, wie JSON-Funktionen und Operatoren verwenden werden:You can see how to use JSON functions and operators in the following video:

SQL Server 2016 and JSON SupportSQL Server 2016 and JSON Support

Extrahieren von Werten aus JSON-Text und Verwenden dieser Werte in AbfragenExtract values from JSON text and use them in queries

Wenn Sie JSON-Text verwenden, der in Datenbanktabellen gespeichert ist, können Sie Werte in dem JSON-Text lesen oder ändern, indem Sie die folgenden integrierten Funktionen verwenden:If you have JSON text that's stored in database tables, you can read or modify values in the JSON text by using the following built-in functions:

BeispielExample

Im folgenden Beispiel verwendet die Abfrage sowohl relationale als auch JSON-Daten (gespeichert in der Spalte namens jsonCol) aus einer Tabelle:In the following example, the query uses both relational and JSON data (stored in a column named jsonCol) from a table:

SELECT Name,Surname,
 JSON_VALUE(jsonCol,'$.info.address.PostCode') AS PostCode,
 JSON_VALUE(jsonCol,'$.info.address."Address Line 1"')+' '
  +JSON_VALUE(jsonCol,'$.info.address."Address Line 2"') AS Address,
 JSON_QUERY(jsonCol,'$.info.skills') AS Skills
FROM People
WHERE ISJSON(jsonCol)>0
 AND JSON_VALUE(jsonCol,'$.info.address.Town')='Belgrade'
 AND Status='Active'
ORDER BY JSON_VALUE(jsonCol,'$.info.address.PostCode')

Anwendungen und Tools erkennen keinen Unterschied zwischen den Werten aus skalaren Tabellenspalten und denen aus JSON-Spalten.Applications and tools see no difference between the values taken from scalar table columns and the values taken from JSON columns. Sie können Werte aus dem JSON-Text in jedem Teil der Transact-SQL-Abfrage verwenden (z.B. WHERE-, ORDER BY-, GROUP BY-Klauseln, Fenster-Aggregate usw.).You can use values from JSON text in any part of a Transact-SQL query (including WHERE, ORDER BY, or GROUP BY clauses, window aggregates, and so on). JSON-Funktionen verwenden eine JavaScript-ähnliche Syntax zum Verweisen auf Werte in JSON-Text.JSON functions use JavaScript-like syntax for referencing values inside JSON text.

Weitere Informationen finden Sie unter Überprüfen, Abfragen und Ändern von JSON-Daten mit integrierten Funktionen (SQL Server), JSON_VALUE (Transact-SQL) und JSON_QUERY (Transact-SQL).For more information, see Validate, query, and change JSON data with built-in functions (SQL Server), JSON_VALUE (Transact-SQL), and JSON_QUERY (Transact-SQL).

Ändern der JSON-WerteChange JSON values

Wenn Sie Teile des JSON-Texts ändern müssen, können Sie die JSON_MODIFY (Transact-SQL)-Funktion verwenden, um den Wert einer Eigenschaft in einer JSON-Zeichenfolge zu aktualisieren und die aktualisierte JSON-Zeichenfolge zurückzugeben.If you must modify parts of JSON text, you can use the JSON_MODIFY (Transact-SQL) function to update the value of a property in a JSON string and return the updated JSON string. Im folgenden Beispiel wird der Wert einer Eigenschaft in einer Variablen aktualisiert, die JSON enthält:The following example updates the value of a property in a variable that contains JSON:

DECLARE @json NVARCHAR(MAX);
SET @json = '{"info":{"address":[{"town":"Belgrade"},{"town":"Paris"},{"town":"Madrid"}]}}';
SET @json = JSON_MODIFY(@json,'$.info.address[1].town','London');
SELECT modifiedJson = @json;

ErgebnisseResults

modifiedJsonmodifiedJson
{"info":{"address":[{"town":"Belgrade"},{"town":"London"},{"town":"Madrid"}]}{"info":{"address":[{"town":"Belgrade"},{"town":"London"},{"town":"Madrid"}]}

Konvertieren der JSON-Sammlungen in ein RowsetConvert JSON collections to a rowset

Eine benutzerdefinierte Abfragesprache ist zur Abfrage von JSON-Daten in SQL Server nicht erforderlich.You don't need a custom query language to query JSON in SQL Server. Zum Abfragen von JSON-Daten können Sie Standard-T-SQL verwenden.To query JSON data, you can use standard T-SQL. Wenn Sie eine Abfrage erstellen oder JSON-Daten protokollieren müssen, können Sie die JSON-Daten einfach durch Aufrufen der OPENJSON-Rowsetfunktion in Zeilen und Spalten konvertieren.If you must create a query or report on JSON data, you can easily convert JSON data to rows and columns by calling the OPENJSON rowset function. Weitere Informationen finden Sie unter Konvertieren von JSON-Daten in Zeilen und Spalten mit OPENJSON (SQL Server).For more information, see Convert JSON Data to Rows and Columns with OPENJSON (SQL Server).

Im folgenden Beispiel wird OPENJSON aufgerufen, um ein Array von Objekten, das in einer @json-Variablen gespeichert ist, in ein Rowset zu transformieren, das mithilfe der SQL SELECT-Standardanweisung abgefragt werden kann:The following example calls OPENJSON and transforms the array of objects that is stored in the @json variable to a rowset that can be queried with a standard SQL SELECT statement:

DECLARE @json NVARCHAR(MAX)
SET @json =  
N'[  
       { "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },  
       { "id" : 5,"info": { "name": "Jane", "surname": "Smith" }, "dob": "2005-11-04T12:00:00" }  
 ]'  

SELECT *  
FROM OPENJSON(@json)  
  WITH (id int 'strict $.id',  
        firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',  
        age int, dateOfBirth datetime2 '$.dob')  

ErgebnisseResults

idid firstNamefirstName lastNamelastName ageage dateOfBirthdateOfBirth
22 JohnJohn SmithSmith 2525
55 JaneJane SmithSmith 2005-11-04T12:00:002005-11-04T12:00:00

OPENJSON transformiert das Array von JSON-Objekten in eine Tabelle, wobei jedes Objekt als eine Zeile dargestellt wird. Die Schlüssel/Wert-Paare werden als Zellen zurückgegeben.OPENJSON transforms the array of JSON objects into a table in which each object is represented as one row, and key/value pairs are returned as cells. Die Ausgabe verwendet die folgenden Regeln:The output observes the following rules:

  • OPENJSON konvertiert JSON-Werte in die Typen, die in der WITH-Klausel angegeben sind.OPENJSON converts JSON values to the types that are specified in the WITH clause.
  • OPENJSON kann sowohl einfache Schlüssel/Wert-Paare als auch geschachtelte, hierarchisch angeordnete Objekte verarbeiten.OPENJSON can handle both flat key/value pairs and nested, hierarchically organized objects.
  • Sie müssen nicht alle Felder zurückgeben, die im JSON-Text enthalten sind.You don't have to return all the fields that are contained in the JSON text.
  • OPENJSON gibt NULL-Werte zurück, wenn keine JSON-Werte vorhanden sind.If JSON values don't exist, OPENJSON returns NULL values.
  • Sie können optional einen Pfad zu der Typspezifikation angeben, um auf eine geschachtelte Eigenschaft, oder um mit einem anderen Namen auf eine Eigenschaft zu verweisen.You can optionally specify a path after the type specification to reference a nested property or to reference a property by a different name.
  • Das optionale strenge im Pfad gibt an, dass die Werte für die angegebenen Eigenschaften im JSON-Text vorhanden sein müssen.The optional strict prefix in the path specifies that values for the specified properties must exist in the JSON text.

Weitere Informationen finden Sie unter Konvertieren von JSON-Daten in Zeilen und Spalten mit OPENJSON (SQL Server) und OPENJSON (Transact-SQL).For more information, see Convert JSON Data to Rows and Columns with OPENJSON (SQL Server) and OPENJSON (Transact-SQL).

JSON-Dokumente enthalten möglicherweise untergeordnete Elemente und hierarchische Daten, die relationalen Standardspalten nicht direkt zugeordnet werden können.JSON documents may have sub-elements and hierarchical data that cannot be directly mapped into the standard relational columns. Sie können in diesem Fall die JSON-Hierarchie vereinfachen, indem Sie die übergeordnete Entität mit untergeordneten Arrays verknüpfen.In this case, you can flatten JSON hierarchy by joining parent entity with sub-arrays.

Im folgenden Beispiel weist das zweite Objekt des Arrays untergeordnete Arrays auf, die Fähigkeiten von Personen darstellen (Skills-Array).In the following example, the second object in the array has sub-array representing person skills. Jedes untergeordnete Objekt kann mithilfe des zusätzlichen Funktionsaufrufs OPENJSON analysiert werden:Every sub-object can be parsed using additional OPENJSON function call:

DECLARE @json NVARCHAR(MAX)
SET @json =  
N'[  
       { "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },  
       { "id" : 5,"info": { "name": "Jane", "surname": "Smith", "skills": ["SQL", "C#", "Azure"] }, "dob": "2005-11-04T12:00:00" }  
 ]'  

SELECT *  
FROM OPENJSON(@json)  
  WITH (id int 'strict $.id',  
        firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',  
        age int, dateOfBirth datetime2 '$.dob',
    skills nvarchar(max) '$.info.skills' as json) 
    outer apply openjson( skills ) 
                     with ( skill nvarchar(8) '$' )

Das Skills-Array wird im ersten OPENJSON-Element als das ursprüngliche JSON-Textfragment angegeben und mithilfe des APPLY-Operators an eine andere OPENJSON-Funktion übergeben.skills array is returned in the first OPENJSON as original JSON text fragment and passed to another OPENJSON function using APPLY operator. Die zweite OPENJSON-Funktion analysiert das JSON-Array und gibt Zeichenfolgenwerte als Rowsets mit nur einer Spalte zurück, die mit dem Ergebnis des ersten OPENJSON-Elements verknüpft werden.The second OPENJSON function will parse JSON array and return string values as single column rowset that will be joined with the result of the first OPENJSON. Das Ergebnis dieser Abfrage wird in der folgenden Tabelle dargestellt:The result of this query is shown in the following table:

ErgebnisseResults

idid firstNamefirstName lastNamelastName ageage dateOfBirthdateOfBirth skillskill
22 JohnJohn SmithSmith 2525
55 JaneJane SmithSmith 2005-11-04T12:00:002005-11-04T12:00:00 SQLSQL
55 JaneJane SmithSmith 2005-11-04T12:00:002005-11-04T12:00:00 C#C#
55 JaneJane SmithSmith 2005-11-04T12:00:002005-11-04T12:00:00 AzureAzure

OUTER APPLY OPENJSON verknüpft die Entität auf der ersten Ebene mit dem untergeordneten Array und gibt ein vereinfachtes Resultset zurück.OUTER APPLY OPENJSON will join first level entity with sub-array and return flatten resultset. Aufgrund der JOIN-Methode wird die zweite Zeile für jedes Skill-Array wiederholt.Due to JOIN, the second row will be repeated for every skill.

Konvertieren von SQL Server-Daten in JSON oder Exportieren von JSONConvert SQL Server data to JSON or export JSON

Formatieren Sie Daten aus SQL Server oder die Ergebnisse von SQL-Abfragen im JSON-Format, indem Sie die FOR JSON -Klausel einer SELECT -Anweisung hinzufügen.Format SQL Server data or the results of SQL queries as JSON by adding the FOR JSON clause to a SELECT statement. Verwenden Sie FOR JSON, um die Formatierung der JSON-Ausgabe von den Clientanwendungen an SQL Server zu delegieren.Use FOR JSON to delegate the formatting of JSON output from your client applications to SQL Server. Weitere Informationen finden Sie unter Formatieren von Abfrageergebnissen als JSON mit FOR JSON (SQL Server).For more information, see Format Query Results as JSON with FOR JSON (SQL Server).

Im folgenden Beispiel wird der PATH-Modus mit der FOR JSON-Klausel verwendet:The following example uses PATH mode with the FOR JSON clause:

SELECT id, firstName AS "info.name", lastName AS "info.surname", age, dateOfBirth as dob  
FROM People  
FOR JSON PATH  

Am FOR JSON -Klausel formatiert SQL-Ergebnisse als JSON-Text, der für alle Apps bereitgestellt werden kann, die JSON verstehen.The FOR JSON clause formats SQL results as JSON text that can be provided to any app that understands JSON. Die Option PATH verwendet in der SELECT-Klausel durch Punkte getrennte Aliase, um Objekte in den Abfrageergebnissen zu schachteln.The PATH option uses dot-separated aliases in the SELECT clause to nest objects in the query results.

ErgebnisseResults

[{
    "id": 2,
    "info": {
        "name": "John",
        "surname": "Smith"
    },
    "age": 25
}, {
    "id": 5,
    "info": {
        "name": "Jane",
        "surname": "Smith"
    },
    "dob": "2005-11-04T12:00:00"
}] 

Weitere Informationen finden Sie unter Formatieren von Abfrageergebnissen als JSON mit FOR JSON (SQL Server) und FOR-Klausel (Transact-SQL).For more information, see Format query results as JSON with FOR JSON (SQL Server) and FOR Clause (Transact-SQL).

Anwendungsfälle für JSON-Daten in SQL ServerUse cases for JSON data in SQL Server

Durch die JSON-Unterstützung in SQL Server und Azure SQL-Datenbank können Sie relationale Konzepte mit NoSQL-Konzepten verbinden.JSON support in SQL Server and Azure SQL Database lets you combine relational and NoSQL concepts. Dadurch lassen sich relationale Daten leicht in teilweise strukturierte Daten und umgekehrt transformieren.You can easily transform relational to semi-structured data and vice-versa. JSON ist jedoch kein Ersatz für vorhandene relationale Modelle.JSON is not a replacement for existing relational models, however. Im Folgenden werden einige spezifische Anwendungsfälle beschrieben, in denen die JSON-Unterstützung in SQL Server und SQL-Datenbank genutzt wird.Here are some specific use cases that benefit from the JSON support in SQL Server and in SQL Database. Weitere Informationen finden Sie unter JSON in SQL Server – Use cases (JSON in SQL Server: Anwendungsfälle).For more info, see JSON in SQL Server - Use cases.

Vereinfachen komplexer DatenmodelleSimplify complex data models

Denormalisieren Sie Ihr Datenmodell mit JSON-Feldern anstelle von mehreren untergeordneten Tabellen.Consider denormalizing your data model with JSON fields in place of multiple child tables. Weitere Informationen hierzu finden Sie unter Simplify data access using de-normalized models (Vereinfachen des Datenzugriffs mit denormalisierten Modellen).For more info, see Simplify data access using de-normalized models.

Speichern von Einzelhandels- und E-Commerce-DatenStore retail and e-commerce data

Speichern Sie Informationen über Produkte mit vielen veränderbaren Attributen in einem denormalisierten Modell, um mehr Flexibilität zu erhalten.Store info about products with a wide range of variable attributes in a denormalized model for flexibility. Weitere Informationen hierzu finden Sie unter Designing Product Catalogs in SQL Server using JSON (Entwerfen von Produktkatalogen in SQL Server mit JSON) und Indexing data in JSON product catalogs (Indizieren von Daten in JSON-Produktkatalogen).For more info, see Designing Product Catalogs in SQL Server using JSON and Indexing data in JSON product catalogs.

Verarbeiten von Protokoll- und TelemetriedatenProcess log and telemetry data

Laden Sie als JSON-Dateien gespeicherte Protokolldaten, fragen Sie diese ab und analysieren Sie sie mithilfe der leistungsfähigen Programmiersprache Transact-SQL.Load, query, and analyze log data stored as JSON files with all the power of the Transact-SQL language. Weitere Informationen hierzu finden Sie im Artikel JSON in SQL Server – Use cases (JSON in SQL Server :Anwendungsfälle) im Abschnitt Log and telemetry data analysis (Analyse von Protokoll- und Telemetriedaten).For more info, see the section Log and telemetry data analysis in JSON in SQL Server - Use cases.

Speichern von teilweise strukturieren IoT-DatenStore semi-structured IoT data

Laden Sie bei einer Echtzeitanalyse von IoT-Daten eingehende Daten direkt in die Datenbank, anstatt sie durch Staging an einem Speicherort bereitzustellen.When you need real-time analysis of IoT data, load the incoming data directly into the database instead of staging it in a storage location. Weitere Informationen hierzu finden Sie unter Working with Azure IoT data in Azure SQL Database (Arbeiten mit Azure IoT-Daten in Azure SQL-Datenbank).For more info, see Working with Azure IoT data in Azure SQL Database.

Vereinfachen der REST-API-EntwicklungSimplify REST API development

Transformieren Sie relationale Daten aus Ihrer Datenbank problemlos in das JSON-Format, das von den REST-APIs verwendet wird, die Ihre Website unterstützen.Transform relational data from your database easily into the JSON format used by the REST APIs that support your web site. Weitere Informationen hierzu finden Sie unter Simplify REST API development for modern Single-page apps with SQL Server (Vereinfachen der REST-API-Entwicklung für moderne Single-Page-Apps mit SQL Server).For more info, see Simplify REST API development for modern Single-page apps with SQL Server.

Kombinieren von relationalen und JSON-DatenCombine relational and JSON data

SQL Server bietet ein Hybridmodell zum Speichern und Verarbeiten von relationalen Daten und JSON-Daten, indem die Transact-SQL-Standardsprache verwendet wird.SQL Server provides a hybrid model for storing and processing both relational and JSON data by using standard Transact-SQL language. Sie können Sammlungen Ihrer JSON-Dokumente nach Tabellen anordnen, Beziehungen zwischen ihnen herstellen, in Tabellen gespeicherte, stark typisierte Skalarspalten mit flexiblen Schlüssel-Wert/Paaren kombinieren, die in JSON-Spalten gespeichert werden, und sowohl Skalarwerte als auch JSON-Werte in einer oder mehreren Tabellen abfragen, indem Sie vollständiges Transact-SQL verwenden.You can organize collections of your JSON documents in tables, establish relationships between them, combine strongly typed scalar columns stored in tables with flexible key/value pairs stored in JSON columns, and query both scalar and JSON values in one or more tables by using full Transact-SQL.

JSON-Text wird in „varchar“- oder „nvarchar“-Spalten gespeichert und als Nur-Text indiziert.JSON text is stored in varchar or nvarchar columns and is indexed as plain text. Jede SQL Server-Funktion oder -Komponente, die Text unterstützt, unterstützt auch JSON, daher gibt es fast keine Einschränkungen hinsichtlich der Interaktion zwischen JSON und anderen SQL Server-Funktionen.Any SQL Server feature or component that supports text supports JSON, so there are almost no constraints on interaction between JSON and other SQL Server features. Sie können JSON im Arbeitsspeicher oder in temporalen Tabellen speichern, Sicherheitsprädikate auf Zeilenebene auf JSON-Text anwenden usw.You can store JSON in In-memory or Temporal tables, apply Row-Level Security predicates on JSON text, and so on.

Wenn bei Ihnen reine JSON-Arbeitsauslastungen vorliegen, für die Sie eine Abfragesprache verwenden möchten, die der Verarbeitung von JSON-Dokumenten angepasst ist, sollten Sie Microsoft Azure Cosmos DB in Erwägung ziehen.If you have pure JSON workloads where you want to use a query language that's customized for the processing of JSON documents, consider Microsoft Azure Cosmos DB.

Hier folgen einige Anwendungsfälle, die veranschaulichen, wie Sie die integrierte JSON-Unterstützung in SQL ServerSQL Serververwenden können.Here are some use cases that show how you can use the built-in JSON support in SQL ServerSQL Server.

Speichern und Indizieren von JSON-Daten in SQL ServerStore and index JSON data in SQL Server

JSON ist ein Textformat. Deshalb können JSON-Dokumente in einer SQL-Datenbank-Instanz in NVARCHAR-Spalten gespeichert werden.JSON is a textual format so the JSON documents can be stored in NVARCHAR columns in a SQL Database. Da der Typ NVARCHAR in allen untergeordneten Systemen von SQL Server unterstützt wird, können Sie JSON-Dokumente in Tabellen mit CLUSTERED COLUMNSTORE-Indizes, arbeitsspeicheroptimierten Tabellen oder externen Dateien speichern, die mit OPENROWSET oder PolyBase gelesen werden können.Since NVARCHAR type is supported in all SQL Server sub-systems you can put JSON documents in tables with CLUSTERED COLUMNSTORE indexes, memory optimized tables, or external files that can be read using OPENROWSET or PolyBase.

Weitere Informationen zu den verschiedenen Optionen zum Speichern, Indizieren und Optimieren von JSON-Daten in SQL Server finden Sie unter:To learn more about your options for storing, indexing, and optimizing JSON data in SQL Server, see the following articles:

Laden von JSON-Dateien in SQL ServerLoad JSON files into SQL Server

Sie können Informationen, die in Dateien gespeichert sind, als Standard-JSON oder als JSON-Text formatieren, in dem Zeilenumbrüche als Trennzeichen verwendet werden.You can format information that's stored in files as standard JSON or line-delimited JSON. SQL Server kann die Inhalte aus JSON-Dateien importieren, sie über die OPENJSON- oder JSON_VALUE-Funktion analysieren und in Tabellen laden.SQL Server can import the contents of JSON files, parse it by using the OPENJSON or JSON_VALUE functions, and load it into tables.

  • Wenn Ihre JSON-Dokumente in lokalen Dateien, auf freigegebenen Netzlaufwerken oder ein Azure Files-Speicherorten gespeichert sind, auf die SQL Server zugreifen kann, können Sie einen Massenimport durchführen, um die JSON-Daten in SQL Server zu laden.If your JSON documents are stored in local files, on shared network drives, or in Azure Files locations that can be accessed by SQL Server, you can use bulk import to load your JSON data into SQL Server. Weitere Informationen zu diesem Szenario finden Sie unter Importing JSON files into SQL Server using OPENROWSET (BULK)(Importieren von JSON-Dateien in SQL Server mithilfe von OPENROWSET [BULK]).For more information about this scenario, see Importing JSON files into SQL Server using OPENROWSET (BULK).

  • Wenn Ihre JSON-Dateien, die Zeilenumbrüche als Trennzeichen verwenden, in Azure-Blobspeicher oder im Hadoop-Dateisystem gespeichert werden, können Sie den JSON-Text mithilfe von PolyBase laden, in Transact-SQL-Code analysieren und in Tabellen laden.If your line-delimited JSON files are stored in Azure Blob storage or the Hadoop file system, you can use PolyBase to load JSON text, parse it in Transact-SQL code, and load it into tables.

Importieren von JSON-Daten in SQL Server-TabellenImport JSON data into SQL Server tables

Wenn Sie JSON-Daten aus einem externen Dienst in SQL Server laden müssen, können Sie die Daten mit OPENJSON in SQL Server importieren, anstatt die Daten in der Anwendungsschicht zu analysieren.If you must load JSON data from an external service into SQL Server, you can use OPENJSON to import the data into SQL Server instead of parsing the data in the application layer.

DECLARE @jsonVariable NVARCHAR(MAX)

SET @jsonVariable = N'[  
        {  
          "Order": {  
            "Number":"SO43659",  
            "Date":"2011-05-31T00:00:00"  
          },  
          "AccountNumber":"AW29825",  
          "Item": {  
            "Price":2024.9940,  
            "Quantity":1  
          }  
        },  
        {  
          "Order": {  
            "Number":"SO43661",  
            "Date":"2011-06-01T00:00:00"  
          },  
          "AccountNumber":"AW73565",  
          "Item": {  
            "Price":2024.9940,  
            "Quantity":3  
          }  
       }  
  ]'

INSERT INTO SalesReport  
SELECT SalesOrderJsonData.*  
FROM OPENJSON (@jsonVariable, N'$.Orders.OrdersArray')  
           WITH (  
              Number   varchar(200) N'$.Order.Number',   
              Date     datetime     N'$.Order.Date',  
              Customer varchar(200) N'$.AccountNumber',   
              Quantity int          N'$.Item.Quantity'  
           )  
  AS SalesOrderJsonData;  

Sie können den Inhalt der JSON-Variablen durch eine externen REST-Dienst bereitstellen, als Parameter aus einem clientseitigen JavaScript-Framework senden oder aus externen Dateien laden.You can provide the content of the JSON variable by an external REST service, send it as a parameter from a client-side JavaScript framework, or load it from external files. Sie können Ergebnisse aus JSON-Text ganz einfach in eine SQL Server-Tabelle einfügen, dort aktualisieren oder zusammenführen.You can easily insert, update, or merge results from JSON text into a SQL Server table. Weitere Informationen zu diesem Szenario finden Sie in den folgenden Blogbeiträgen:For more information about this scenario, see the following blog posts:

Analysieren von JSON-Daten mit SQL-AbfragenAnalyze JSON data with SQL queries

Wenn Sie JSON-Daten für Berichtszwecke filtern oder aggregieren müssen, können Sie JSON mithilfe von OPENJSON in ein relationales Format transformieren.If you must filter or aggregate JSON data for reporting purposes, you can use OPENJSON to transform JSON to relational format. Sie können dann Standard- oder integrierte Funktionen von Transact-SQLTransact-SQL verwenden, um die Berichte vorzubereiten.You can then use standard Transact-SQLTransact-SQL and built-in functions to prepare the reports.

SELECT Tab.Id, SalesOrderJsonData.Customer, SalesOrderJsonData.Date  
FROM   SalesOrderRecord AS Tab  
          CROSS APPLY  
     OPENJSON (Tab.json, N'$.Orders.OrdersArray')  
           WITH (  
              Number   varchar(200) N'$.Order.Number',   
              Date     datetime     N'$.Order.Date',  
              Customer varchar(200) N'$.AccountNumber',   
              Quantity int          N'$.Item.Quantity'  
           )  
  AS SalesOrderJsonData  
WHERE JSON_VALUE(Tab.json, '$.Status') = N'Closed'  
ORDER BY JSON_VALUE(Tab.json, '$.Group'), Tab.DateModified  

Sie können sowohl Standardtabellenspalten als auch Werte aus JSON-Text in derselben Abfrage verwenden.You can use both standard table columns and values from JSON text in the same query. Sie können Indizes zum JSON_VALUE(Tab.json, '$.Status')-Ausdruck hinzufügen, um die Leistung der Abfrage zu verbessern.You can add indexes on the JSON_VALUE(Tab.json, '$.Status') expression to improve the performance of the query. Weitere Informationen finden Sie unter Indizieren von JSON-Daten.For more information, see Index JSON data.

Rückgabe von Daten aus einer SQL Server-Tabelle im JSON-FormatReturn data from a SQL Server table formatted as JSON

Wenn Sie einen Webdienst verwenden, der Daten von der Datenbankebene übernimmt und sie im JSON-Format zurückgibt, oder wenn Sie JavaScript-Frameworks oder -Bibliotheken haben, die Daten im JSON-Format akzeptieren, können Sie JSON-Ausgabe direkt in einer SQL-Abfrage formatieren.If you have a web service that takes data from the database layer and returns it in JSON format, or if you have JavaScript frameworks or libraries that accept data formatted as JSON, you can format JSON output directly in a SQL query. Anstatt Code zu schreiben oder eine Bibliothek einzuschließen, um tabellarische Abfrageergebnisse zu konvertieren und dann Objekte in das JSON-Format zu serialisieren, können Sie auch FOR JSON verwenden, um die JSON-Formatierung an SQL Server zu delegieren.Instead of writing code or including a library to convert tabular query results and then serialize objects to JSON format, you can use FOR JSON to delegate the JSON formatting to SQL Server.

Sie können z.B. eine JSON-Ausgabe generieren, die der OData-Spezifikation entspricht.For example, you might want to generate JSON output that's compliant with the OData specification. Der Webdienst erwartet eine Anforderung und Antwort im folgenden Format:The web service expects a request and response in the following format:

  • Anforderung: /Northwind/Northwind.svc/Products(1)?$select=ProductID,ProductNameRequest: /Northwind/Northwind.svc/Products(1)?$select=ProductID,ProductName

  • Antwort: {"@odata.context":"https://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Products(ProductID,ProductName)/$entity","ProductID":1,"ProductName":"Chai"}Response: {"@odata.context":"https://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Products(ProductID,ProductName)/$entity","ProductID":1,"ProductName":"Chai"}

Diese OData-URL stellt eine Anforderung für die Spalten „ProductID“ und „ProductName“ für das Produkt mit der id 1 dar.This OData URL represents a request for the ProductID and ProductName columns for the product with id 1. Sie können FOR JSON verwenden, um die Ausgabe erwartungsgemäß in SQL Server zu formatieren.You can use FOR JSON to format the output as expected in SQL Server.

SELECT 'https://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Products(ProductID,ProductName)/$entity'
 AS '@odata.context',   
 ProductID, Name as ProductName   
FROM Production.Product  
WHERE ProductID = 1  
FOR JSON AUTO  

Das Ergebnis dieser Abfrage ist ein vollständig mit der OData-Spezifikation konformer JSON-Text. Formatierung und Escapevorgang werden von SQL Server übernommen.The output of this query is JSON text that's fully compliant with the OData spec. Formatting and escaping are handled by SQL Server. SQL Server kann Abfrageergebnisse auch in einem beliebigen Format formatieren, etwa OData JSON oder GeoJSON.SQL Server can also format query results in any format, such as OData JSON or GeoJSON. Weitere Informationen finden Sie unter Returning spatial data in GeoJSON format.For more information, see Returning spatial data in GeoJSON format.

Testen Sie die integrierte JSON-Unterstützung mithilfe der AdventureWorks-Beispieldatenbank.Test drive built-in JSON support with the AdventureWorks sample database

Laden Sie zum Abrufen der AdventureWorks-Beispieldatenbank zumindest die Datenbankdatei und die Beispiele- und Skriptdatei aus Microsoft Download Center herunter.To get the AdventureWorks sample database, download at least the database file and the samples and scripts file from Microsoft Download Center.

Nach der Wiederherstellung der Beispieldatenbank in einer Instanz von SQL Server 2016 extrahieren Sie die Beispieldateien, und öffnen Sie dann die Datei JSON Sample Queries procedures views and indexes.sql aus dem JSON-Ordner.After you restore the sample database to an instance of SQL Server 2016, extract the samples file, and then open the JSON Sample Queries procedures views and indexes.sql file from the JSON folder. Führen Sie die Skripts in dieser Datei aus, um einige der vorhandenen Daten als JSON-Daten neu zu formatieren, testen Sie Beispielabfragen und -berichte für die JSON-Daten, indizieren Sie die JSON-Daten, und importieren und exportieren Sie JSON.Run the scripts in this file to reformat some existing data as JSON data, test sample queries and reports over the JSON data, index the JSON data, and import and export JSON.

Mit den Skripts, die in der Datei enthalten sind, haben Sie die folgenden Möglichkeiten:Here's what you can do with the scripts that are included in the file:

  • Denormalisieren Sie die vorhandenen Schemas, um Spalten mit JSON-Daten zu erstellen.Denormalize the existing schema to create columns of JSON data.

    • Speichern Sie Informationen aus den Tabellen „SalesReasons“, „SalesOrderDetails“, „SalesPerson“, „Customer“ sowie aus anderen Tabellen, die auftragsbezogene Daten enthalten, in der Tabelle „SalesOrder_json“ in JSON-Spalten.Store information from SalesReasons, SalesOrderDetails, SalesPerson, Customer, and other tables that contain information related to sales order into JSON columns in the SalesOrder_json table.

    • Speichern Sie Informationen aus den Tabellen „EmailAddresses“ bzw. „PersonPhone“ als Arrays von JSON-Objekten in der Tabelle „Person_json“.Store information from EmailAddresses/PersonPhone tables in the Person_json table as arrays of JSON objects.

  • Erstellen Sie Prozeduren und Sichten, die JSON-Daten abfragen.Create procedures and views that query JSON data.

  • Indizieren Sie die JSON-Daten.Index JSON data. Erstellen Sie Indizes zu JSON-Eigenschaften und Volltextindizes.Create indexes on JSON properties and full-text indexes.

  • Importieren und exportieren Sie JSON.Import and export JSON. Erstellen Sie Prozeduren, die den Inhalt der Tabellen „Person“ und „SalesOrder“ als JSON-Ergebnisse exportieren, führen Sie diese Prozeduren aus, und importieren und aktualisieren Sie die Tabellen „Person“ und „SalesOrder“, indem Sie JSON-Eingabe verwenden.Create and run procedures that export the content of the Person and the SalesOrder tables as JSON results, and import and update the Person and the SalesOrder tables by using JSON input.

  • Führen Sie Abfragebeispiele aus.Run query examples. Führen Sie einige Abfragen aus, die die gespeicherten Prozeduren und Sichten aufrufen, die Sie in den Schritten 2 und 4 erstellt haben.Run some queries that call the stored procedures and views that you created in steps 2 and 4.

  • Bereinigen Sie Skripts.Clean up scripts. Führen Sie diesen Teil nicht aus, wenn Sie die gespeicherten Prozeduren und Sichten beibehalten möchten, die Sie in den Schritten 2 und 4 erstellt haben.Don't run this part if you want to keep the stored procedures and views that you created in steps 2 and 4.

Weitere Informationen zu JSON in SQL Server und Azure SQL-DatenbankLearn more about JSON in SQL Server and Azure SQL Database

Microsoft-BlogbeiträgeMicrosoft blog posts

Spezielle Lösungen, Anwendungsfälle und Empfehlungen finden Sie in den Blogbeiträgen über die integrierte JSON-Unterstützung in SQL-Server und in Azure SQL-Datenbank.For specific solutions, use cases, and recommendations, see these blog posts about the built-in JSON support in SQL Server and Azure SQL Database.

Microsoft-VideosMicrosoft videos

Eine visuelle Einführung in die JSON-Unterstützung, die in SQL Server und Azure SQL-Datenbank integriert ist, finden Sie in den folgenden Videos:For a visual introduction to the built-in JSON support in SQL Server and Azure SQL Database, see the following video:

Using JSON in SQL Server 2016 and Azure SQL DatabaseUsing JSON in SQL Server 2016 and Azure SQL Database

Building REST API with SQL Server using JSON functions (Erstellen einer REST-API mithilfe von JSON-Funktionen mit SQL Server)Building REST API with SQL Server using JSON functions

ReferenzartikelReference articles