在运行OPENJSON_查询时,子查询返回了多个值
我正试图针对下表编写一个查询 创建表employees id int identity1,1主键,content nvarcharmax; 在员工内容中插入 价值观 不{ 姓名:约翰·多伊, 技能:[ { 语言:SQL, 年份:3 }, { 语言:C, 年份:4 } ] }', 不{ 姓名:爱丽丝·史密斯, 技能:[ { 语言:JS, 年份:5 } ] } ' ; 我要做的是得到以下结果在运行OPENJSON_查询时,子查询返回了多个值,json,sql-server,Json,Sql Server,我正试图针对下表编写一个查询 创建表employees id int identity1,1主键,content nvarcharmax; 在员工内容中插入 价值观 不{ 姓名:约翰·多伊, 技能:[ { 语言:SQL, 年份:3 }, { 语言:C, 年份:4 } ] }', 不{ 姓名:爱丽丝·史密斯, 技能:[ { 语言:JS, 年份:5 } ] } ' ; 我要做的是得到以下结果 + id + name + language + years + | 1 | John Do
+ id + name + language + years +
| 1 | John Doe | SQL | 3 |
| 2 | John Doe | C# | 4 |
| 3 | Alice Smith | JS | 3 |
这是我想到的
从中选择*
OPENJSONJSON_查询从员工中选择内容,'$.skills'
具有
语言VARCHAR50'$.Language',
年整数“$.Years”
您可以在dbfiddle中查看它
当内容列包含一行时,它可以工作,但当有更多行时,它会失败
Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我明白这意味着什么,但我不知道如何以不同的方式实现它
我一直在尝试和此错误的原因是JSON_QUERYSELECT content FROM employees,'$.skills'语句的一部分,因为JSON_QUERY需要一个JSON字符串。要解决此错误,可以尝试以下语句:
SELECT e.id, j1.name, j2.language, j2.years
FROM employees e
OUTER APPLY OPENJSON(e.content) WITH (
name nvarchar(100) '$.name',
skills nvarchar(max) '$.skills' AS JSON
) j1
OUTER APPLY OPENJSON(j1.skills) WITH (
language nvarchar(100) '$.language',
years int '$.years'
) j2
结果:
id name language years
1 John Doe SQL 3
1 John Doe C# 4
2 Alice Smith JS 5
这里的错误告诉您问题所在。您不明白的错误是什么,我们可以尝试详细说明。下面是MS文档的示例