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