2017-09-21 150 views
0

在SQL Server 2008中(SQL Azure數據集)我有一個查詢,我試圖從現有的JSON格式列中解析多個元素。帶替換方法的SQL Server 2008 JSON_VALUE

JSON_VALUE替換方法對前幾列工作正常。

但是,SQL Server在添加額外的JSON_VALUE後使用替換方法現在引發錯誤。

這是我的查詢:

SELECT 
    ApplicationID, Type, CreateDate, 
    JSON_VALUE(RawContent,'$.errorName') AS ErrorName, 
    JSON_VALUE(replace(replace(RawContent,'[',''),']',''),'$.errorMessage') AS ErrorMessage, 
    JSON_VALUE(RawContent,'$.bookId') AS BookId, 
    JSON_QUERY(RawContent,'$.urlParams') AS UrlParams, 
    JSON_VALUE(replace(RawContent,',',''),'$.userAgent') AS UserAgent, --line in question 
    JSON_VALUE(replace(RawContent,' ','') ,'$.stackTrace') AS StackTrace 
FROM 
    dbo.Feedback 
WHERE 
    ISJSON(RawContent) > 0 
ORDER BY 
    RecordID 

我的JSON格式塔(RawContent)看起來是這樣的:

{"errorName": "not authorized", 
"errorMessage":"Request denied: account permission error", 
"bookId":"150675", 
"urlParams":{"audiobook":"https://node.axisnow.com/#audiobook/"}, 
"userAgent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"} 

所以我期待的查詢,爲每個JSON_VALUE列,而從「userAgent」列中刪除逗號',',如下所示:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 

只是沒了逗號「」看起來像:(KHTML例如Gecko)

的替代方法適用於errormessage,和堆棧跟蹤,但由於某些原因,它會導致一個錯誤,當我上的userAgent行運行它,它似乎不喜歡「,」字符,我想知道我需要使用什麼,因爲我無法在網上找到任何東西。

錯誤消息:

消息13609,級別16,狀態2,行1
JSON文本的格式不正確。在位置43找到意外字符':'。

請幫忙。我的老闆以爲這是昨天完成的......

+0

所有這些JSON函數都是**新功能**在SQL Server ** 2016 ** - 我不知道你期望他們如何在SQL Server ** 2008中工作** ...... –

+0

您可能正在運行SSMS 2008(管理GUI),但針對2016引擎?運行'SELECT @@ VERSION'並查看你的編碼對應的**引擎版本**。再說一遍:SQL Server ** 2008 **從來沒有像「JSON_VALUE」這樣的東西 - 這個**不可能在2008年工作(除非你已經安裝了某種基於.NET/SQL-CLR的擴展或某種東西)。 –

+0

@marc_s JSON_VALUE可以工作,因爲數據集來自SQL Azure。不適當編輯問題以反映這一點。謝謝 –

回答

0

根據我的研究,似乎沒有理想的解決方案來完成這項任務。因爲JSON_VALUE方法使用逗號作爲分隔符將json字符串分解爲多個列,所以在這種情況下無法刪除它。希望這可以幫助別人