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

以下只是JSON中的Genres列,我想创建另一个表,使该表中的每一行都有许多行,以列出流派id和名称,并通过主键连接这两个表
我使用了SQL Server中提供的OPENJSON,但我只针对一条记录而不是针对整个表使用了所有内容
DECLARE @json nvarchar(MAX) = (SELECT TOP (1) [Genres]
FROM [IMDB_movies].[dbo].[Genre_movies])
SELECT *
FROM OPENJSON(@json)
WITH (id FLOAT,
name VARCHAR(100))但我不知道如何将表中的整个流派记录转换为主表中流派记录中每个标签的多行新表。
发布于 2017-12-08 11:05:42
试试这个答案:
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 #Temphttps://stackoverflow.com/questions/47702676
复制相似问题