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

标签 sql json sql-server-2016

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

我的表结构如下:

field           type            nullable   default
name          | nvarchar(max) | true     | Null
age           | nvarchar(max) | true     | Null
homeAddress   | nvarchar(max) | true     | Null
officeAddress | nvarchar(max) | true     | Null

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

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

但是,表中仅填充nameage 的值。 homeAddressofficeAddress 值均为 NULL。

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

最佳答案

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

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

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

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

关于sql - 如何将 JSON 对象作为 nvarchar 插入到 SQL Server 2016,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46323946/

相关文章:

sql - 如何使用 SQL 打印星形三角形

mysql - 销售系统数据库设计

sql - MySQL 索引结构 : multiple or single index?

javascript - 解析要发布的 JSON 对象

sql-server - SQL Server 2012 的 STRING_ESCAPE( 'SOME TEXT' , 'json' ) 替代方案

sql - 在 SQL Server 中将所有表数据类型从文本更改为 varchar

sql - PostgreSQL 查询列上空值最少的行

php - 如何在 PHP 中处理 JSON?

javascript - 匹配 JSON 字符串的正则表达式

json - 当源未格式化为集合时使用 OPENJSON