首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server中将JSON列值转换为多行的独立模式?

如何在SQL Server中将JSON列值转换为多行的独立模式?
EN

Stack Overflow用户
提问于 2017-12-08 03:46:44
回答 1查看 426关注 0票数 1

我有一个数据集,其中只有一列是JSON格式的。下面是表格中的截图:

以下只是JSON中的Genres列,我想创建另一个表,使该表中的每一行都有许多行,以列出流派id和名称,并通过主键连接这两个表

我使用了SQL Server中提供的OPENJSON,但我只针对一条记录而不是针对整个表使用了所有内容

代码语言:javascript
复制
DECLARE @json nvarchar(MAX) = (SELECT TOP (1) [Genres]
  FROM [IMDB_movies].[dbo].[Genre_movies])

 SELECT * 
 FROM OPENJSON(@json)
 WITH (id FLOAT,
 name VARCHAR(100))

但我不知道如何将表中的整个流派记录转换为主表中流派记录中每个标签的多行新表。

EN

回答 1

Stack Overflow用户

发布于 2017-12-08 11:05:42

试试这个答案:

代码语言:javascript
复制
DECLARE @Genre_movies TABLE(Generes VARCHAR(8000))
INSERT INTO @Genre_movies VALUES('[{"id":"28","name":"Action"},{"id":"12","name":"Adventure"}]')
INSERT INTO @Genre_movies VALUES('[{"id":"16","name":"Animation"},{"id":"14","name":"Fantasy"}]')

DECLARE @Result TABLE(ID INT,Name VARCHAR(20))

SELECT Generes,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RN
INTO #Temp
FROM @Genre_movies

DECLARE @MIN INT,@MAX INT,@JSONValue VARCHAR(MAX)
SELECT @MAX=MAX(RN),@MIN=MIN(RN) FROM #Temp

WHILE(@MAX>=@MIN)
BEGIN
    SELECT @JSONValue=Generes FROM #Temp WHERE RN=@MIN

    INSERT INTO @Result
    SELECT * 
     FROM OPENJSON(@JSONValue)
     WITH (id FLOAT,
     name VARCHAR(100))

    SET @MIN=@MIN+1
END

SELECT * FROM @Result
DROP TABLE #Temp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47702676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档