1
我有一个包含两列的表:[ID]和[Content](带有ISJSON约束,因此每行在[Content]列中必须具有有效的JSON)。 这些JSON有一个数组字段,它由具有特定ID(以及更多字段)的对象组成。SQL Server:选择在其json列中具有特定id的行
{
"departments": [ { "id": 1, "fieldA": "somevalue" },
{ "id": 2, "fieldA": "somevalue" }]
}
我想执行一个选择查询,这与从部门领域的对象一些特定的ID返回所有行。
我设法创建一个使用游标取出由[内容]列部门现场为@content变量,然后脚本:
SELECT * FROM OPENJSON(@content) WITH(id int) WHERE id IN (1, 2, 3, 9)
但它只返回DepartmentID的,我需要整行。 优选地,它应该是一个(但下面的代码遗憾的是不工作):
SELECT * FROM ITEM I WHERE EXISTS
(SELECT * FROM OPENJSON(I.CONTENT) WITH(id int) WHERE id IN (1, 2, 3, 9))
这看起来很有希望,非常感谢!现在我有一个包含json数据的许多行的表。我怎么能用你的代码片段来解决这个问题?我习惯于从R和R这样的语言中矢量化函数,当我看到它时我感到很失望: 'declare @id nvarchar(2)= '17' select ids。[key],ids。[value] id_val ((选择内容从项目),'$ .departments')作为部门交叉应用OPENJSON(depts.value)作为ids 其中ids。[key] ='departmentid'和ids.value = @ id' 返回子查询返回的值超过1个错误:( – duke
嗯,是的,因为您的选择是从您的ITEM表中获取所有内容值,您需要逐一应用此值'Content'专栏 我正在考虑与您的源表交叉应用_OR_构建动态查询..我会给第一个场景一个尝试。 –
如果我可以假设我的表中只有一行具有带json中该id的json,那么我将使用SELECT TOP 1.不幸的是,这种假设是错误的。 – duke