Insert multiple level JSON data into SQL Server

SQL Server 2016 - OPENJSON read nested JSON and Insert INTO Tables

Insert multiple level JSON data into SQL Server 2016 -
Now Native JSON support in SQL Server 2016 and it provides you some functions to read and parse your JSON object to table format.

1.      The OPENJSON () table value function transforms JSON object to one or many rows. It will not execute any command. It just returns a table row if JSON text is properly formatted. OPENJSON function will also work with JSON arrays and this function can also open nested/hierarchical JSON objects. OPENJSON will just return set of rows instead of single row.
2.      The JSON_Value () is a scalar function and used to returns a value from JSON on the specified path.

There are some specific examples for OPENJSON read nested JSON –

Example 1 – OPENJSON AND JSON INPUT

DECLARE @json NVARCHAR(MAX)

SET @json=N'{
            "Name":"Anil",
            "Surname":"Singh",
            "Age":32,
            "Skills":["SQL","C#","MVC","Angular 2, 4 and 5"]
}'
SELECT * FROM OPENJSON(@json);

Result

Example 2 – OPENJSON AND JSON INPUT

DECLARE @json NVARCHAR(MAX)
set @json =N'[
    {
        "CREATE_DT": 3443434343,
        "INCLUDEIND_IND": true,
        "CREATE_BY": "admin",
        "DOMAIN_ID": "Cable Length",
        "UPDATE_BY": null,
        "VISIBLE": true,
        "SOURCE": "OSB",
        "MIN_VALUE": 2,
        "UPDATE_DT": null,
        "VERSION": 1,
        "MAX_VALUE": 10
    },
    {
        "CREATE_DT": 34334343433,
        "INCLUDEIND_IND": true,
        "CREATE_BY": "admin",
        "DOMAIN_ID": "Number",
        "UPDATE_BY": null,
        "VISIBLE": true,
        "SOURCE": "COB",
        "MIN_VALUE": 1,
        "UPDATE_DT": null,
        "VERSION": 1,
        "MAX_VALUE": 10
    },
    {
        "CREATE_DT": 3434343,
        "INCLUDEIND_IND": true,
        "CREATE_BY": "admin",
        "DOMAIN_ID": "Number_concurrent_access",
        "UPDATE_BY": null,
        "VISIBLE": true,
        "SOURCE": "OCB",
        "MIN_VALUE": 1,
        "UPDATE_DT": null,
        "VERSION": 1,
        "MAX_VALUE": 5
    }]'
 CREATE TABLE TBL_ConvertJSONToTableObject(
             CREATE_DT VARCHAR(30),
             INCLUDEIND_IND VARCHAR(30),
             CREATE_BY VARCHAR(30),
             DOMAIN_ID VARCHAR(30) ,
             UPDATE_BY VARCHAR(30) ,
             VISIBLE VARCHAR(30)   ,
             SOURCE VARCHAR(30)             ,
             MIN_VALUE VARCHAR(30) ,
             UPDATE_DT VARCHAR(30) ,
             VERSION VARCHAR(30)   ,
             MAX_VALUE VARCHAR(30) ,
 )
 INSERT INTO TBL_ConvertJSONToTableObject (
             CREATE_DT,
             INCLUDEIND_IND,
             CREATE_BY,
             DOMAIN_ID,
             UPDATE_BY,
             VISIBLE ,
             SOURCE ,
             MIN_VALUE,
             UPDATE_DT,
             VERSION ,
             MAX_VALUE
 )
SELECT * FROM   OPENJSON (@json) 
            WITH(
                        CREATE_DT VARCHAR(30) '$.CREATE_DT',
                        INCLUDEIND_IND VARCHAR(30) '$.INCLUDEIND_IND',
                        CREATE_BY VARCHAR(30) '$.CREATE_BY',
                        DOMAIN_ID VARCHAR(30) '$.DOMAIN_ID',
                        UPDATE_BY VARCHAR(30) '$.UPDATE_BY',
                        VISIBLE VARCHAR(30) '$.VISIBLE',
                        SOURCE VARCHAR(30) '$.SOURCE',
                        MIN_VALUE VARCHAR(30) '$.MIN_VALUE',
                        UPDATE_DT VARCHAR(30) '$.UPDATE_DT',
                        VERSION VARCHAR(30) '$.VERSION',
                        MAX_VALUE VARCHAR(30) '$.MAX_VALUE'
)
SELECT * FROM TBL_ConvertJSONToTableObject

Result

Example 3 –  USING JSON_VALUE() WITH OPENJSON() FUNCTION

DECLARE @json NVARCHAR(1000)
SELECT @json = N'{
            "Orders": [
                        {
                          "OrderID": 10100,
                          "CustomerID": 202000,

                          "OrderDetail": [{
                                      "ProductID": 302000,
                                      "UnitPrice": 4350     
                                    },     
                                    {            
                                      "ProductID": 203000,
                                      "UnitPrice": 4450
                                    },
                                    {            
                                      "ProductID": 43000,
                                      "UnitPrice": 5560
                                    }]
                        }]
}'
SELECT  JSON_Value (c.value, '$.OrderID') as OrderID,
    JSON_Value (c.value, '$.CustomerID') as CustomerID,
    JSON_Value (p.value, '$.ProductID') as ProductID,
    JSON_Value (p.value, '$.UnitPrice') as UnitPrice

FROM OPENJSON (@json, '$.Orders') as c
                                CROSS APPLY OPENJSON (c.value, '$.OrderDetail') as p
Result
ANIL SINGH

Anil Singh is an author, tech blogger, and software programmer. Book writing, tech blogging is something do extra and Anil love doing it. For more detail, kindly refer to this link..
My Blogs - https://code-sample.com and https://code-sample.xyz
My Book1 - BEST SELLING ANGULAR BOOK (INCLUDING ALL VERSIONS 2, 4, 5, 6, 7)
My Book2 - ANGULAR 2 INTERVIEW QUESTIONS BOOK - Both Books are Available on WorldWide.

www.code-sample.com/. Powered by Blogger.
^