Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server的表列中添加从父JSON读取的JSON值?_Sql_Sql Server_Jsondb - Fatal编程技术网

如何在SQL Server的表列中添加从父JSON读取的JSON值?

如何在SQL Server的表列中添加从父JSON读取的JSON值?,sql,sql-server,jsondb,Sql,Sql Server,Jsondb,我试图读取JSON并将值插入表中。在这些值中,有一个是另一个JSON对象。我试图将JSON值插入到列中,但我的代码没有插入任何内容 以下是我迄今为止所做的尝试: DROP TABLE IF EXISTS #tmp DECLARE @json NVARCHAR(MAX); SET @json = N'[ {"id": 2, "info": {"name": "John", "surname": "Smith"}, "age": 25}, {"id": 5, "info": {"name"

我试图读取JSON并将值插入表中。在这些值中,有一个是另一个JSON对象。我试图将JSON值插入到列中,但我的代码没有插入任何内容

以下是我迄今为止所做的尝试:

DROP TABLE IF EXISTS #tmp

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 [id], [info] 
INTO #tmp
FROM OPENJSON(@json)
     WITH
         (
          [id] NVARCHAR(100), 
          [info] NVARCHAR(max)
         );

SELECT * FROM #tmp
这是我得到的结果:

id  info
--------------
2   NULL
5   NULL

如果我正确理解您的问题,您需要使用文档中提到的
AS JSON
选项:

在列定义中使用AS JSON选项指定 引用的属性包含内部JSON对象或数组。如果你 指定AS JSON选项,列的类型必须为 NVARCHAR(最大值)

声明:

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 [id], [info] 
INTO #tmp
FROM OPENJSON(@json) WITH (
  [id] NVARCHAR(100) '$.id', 
  [info] NVARCHAR(max) '$.info' AS JSON
);
结果:

id  info
2   {"name": "John", "surname": "Smith"}
5   {"name": "Jane", "surname": "Smith"}

我面临的一个问题是,它为我的实际数据添加了空间。有没有办法删除这些空间?除此之外,谢谢,它解决了问题problem@Araf空格在哪里?比如{………..“name”:“Josn”,“姓氏”:“Smith”…..在括号后面(我用点表示空格,因为堆栈溢出删除了空格)