2011-10-26 123 views
2

首先,在我開始討論這個問題之前,我會先說明這一點,因爲我知道這是一個「壞」的想法。但出於商業原因,我必須提出一個解決方案,我希望有人在某處可能對如何解決這個問題有一些想法。創建SQL Server JSON解析/查詢UDF

我有一個「OtherProperties」列的SQL Server 2008 R2表。本專欄包含與記錄有關的各種其他信息,有些隨意的附加信息。例如,業務需要創建UDF,我們可以使用它來查詢結果。

SELECT * 
FROM MyTable 
WHERE MyUDFGetValue(myTable.OtherProperties, "LinkedOrder[0]") IS NOT NULL 

這將發現那裏有,在索引0

SELECT * 
FROM MyTable 
WHERE MyUDFGetValue(myTable.OtherProperties, "SubOrder.OrderId") = 25 

此包含的值會發現一個屬性「訂單ID」,並且在比較使用其值LinkedOrder項陣列的記錄。

任何人都看到這個實現?我見過功能的實現。像這樣的JSONParser將這些值帶入一個表格中,這不會讓我們知道我們需要查詢的方式。複雜性明智,我不想寫一個完整的JSON解析器,但如果需要,我可以。

+0

可能重複[在TSQL中解析JSON](http://stackoverflow.com/questions/2867501/parse-json-in-tsql) – bummi

回答

1

不知道這是否適合您的需求,但我讀了關於CLR JSON序列化/解串器。你可以在這裏找到它,http://www.sqlservercentral.com/articles/CLR/74160/

+0

這是有點很有幫助,但我真的需要在JSON列上進行本機解析/查詢......但這是一個很好的發現! –

1

這是一個很長的時間,因爲你問你的問題,但現在有可以使用的解決方案 - JSON Select提供各種功能不同的數據類型,例如JsonInt()功能。從你的例子之一(假設的OrderId是int,如果不是你可以使用不同的功能):

SELECT * 
FROM MyTable 
WHERE dbo.JsonInt(myTable.OtherProperties, 'SubOrder.OrderId') = 25 

披露: 我JSON選擇的作者,因此在使用它在你的興趣:)