2017-09-05 159 views
0

我想在下面的結構中查詢SQL Server 2016中的某些JSON,我想查找'key'具有特定值的所有記錄。任何幫助如何做到這一點?SQL Server查詢JSON數組

{ 
    "nodeDataArray": [{ 
     "key": "5B502176-E51A-48B7-B8F0-350984CFBCF2", 
     "category": "IFM" 
    }, { 
     "key": "1260263E-6111-47B2-9776-FE9BA5C90DCB", 
     "category": "IFM" 
    }, { 
     "key": "8AE454D3-944E-47BE-8CA9-049318DE213B", 
     "category": "IFM" 
    }, { 
     "key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5", 
     "category": "IFM" 
    } 
    }] 
} 

感謝,

馬特

+0

你使用什麼SQL Server版本?查詢是否保證在此版本上運行? –

+0

如果您發佈的是代碼或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確格式化並語法突出顯示它! –

+0

SQL Server Version 2016 – mnt

回答

1
DECLARE @json NVARCHAR(MAX) 


SET @json = N'{ 
    "nodeDataArray": [ 
    { 
     "key": "5B502176-E51A-48B7-B8F0-350984CFBCF2", 
     "category": "IFM" 
    }, 
    { 
     "key": "1260263E-6111-47B2-9776-FE9BA5C90DCB", 
     "category": "IFM" 
    }, 
    { 
     "key": "8AE454D3-944E-47BE-8CA9-049318DE213B", 
     "category": "IFM" 
    }, 
    { 
     "key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5", 
     "category": "IFM" 
    } 
] 
}' 

SELECT 
    JSON_VALUE(nda.value, '$.key') AS [key], 
    JSON_VALUE(nda.value, '$.category') AS [category] 
FROM OPENJSON(@json, '$.nodeDataArray') AS nda 
WHERE JSON_VALUE(nda.value, '$.key') = '1260263E-6111-47B2-9776-FE9BA5C90DCB' 
+0

關閉,但這不是我有的結構。我有一個nodeDataArray數組,其中包含值... – mnt

+0

這是我需要的,非常感謝。 – mnt

+0

你會介意將答案標記爲正確嗎? –

0

如果你是在SQL 2016年,看看這篇文章: JSON Data (SQL Server)

如果您不在SQL 2016上,則不支持本機JSON。你最好的選擇是用.NET編寫一些東西,並從SQL SP或函數中調用它(谷歌可以幫你開始使用它)。

+0

我在SQL Server 2016上。問題的關鍵在於直接查詢數據庫以查找包含特定鍵值的所有記錄(其中包含數百個包含JSON數據的記錄)。這個語法對我來說不是很清楚。我可以編寫一個.Net函數來做到這一點,但想知道我是否可以簡單地發送一個查詢來獲取我的信息... – mnt