如何将 JSON 对象作为 nvarchar 插入到 SQL Server 2016

Kni*_*lry 5 sql json sql-server-2016

我想在我的 SQL Server 2016 表中插入一些 JSON 对象。

我的表结构如下:

field           type            nullable   default
name          | nvarchar(max) | true     | Null
age           | nvarchar(max) | true     | Null
homeAddress   | nvarchar(max) | true     | Null
officeAddress | nvarchar(max) | true     | Null
Run Code Online (Sandbox Code Playgroud)

我正在使用以下查询插入我的数据:

DECLARE @json NVARCHAR(MAX) = N'{"name":"John Smith","age":32,"homeAddress":{"addr1":"123rd West Street, Willow Apt","addr2":"#55 Suite","zipCode":12345,"city":"Austin","state":"TX"},"officeAddress":{"addr1":"23rd West Street","addr2":"","zipCode":12345,"city":"Austin","state":"TX"}}';

INSERT INTO Employee 
    SELECT * 
    FROM OPENJSON(@json)
    WITH (name nvarchar(50), 
          age int, 
          homeAddress nvarchar(max), 
          officeAddress nvarchar(max)
         );
Run Code Online (Sandbox Code Playgroud)

但是,表中仅填充name和的值age。这两个homeAddressofficeAddress值是NULL。

我的查询有什么问题?如何将 JSON 对象作为 nvarchar 插入?

Eri*_*lje 5

我承认我对 SQL Server 2016 中的 JSON 内容没有经验,但请查看本教程:

https://docs.microsoft.com/en-us/sql/relational-databases/json/solve-common-issues-with-json-in-sql-server

似乎AS JSON在您的NVARCHAR(max)列之后添加可能是您需要的:

INSERT INTO Employee 
    SELECT * 
    FROM OPENJSON(@json)
    WITH (name nvarchar(50), 
          age int, 
          homeAddress nvarchar(max) AS JSON, 
          officeAddress nvarchar(max) AS JSON
         );
Run Code Online (Sandbox Code Playgroud)