這是一個「最佳實踐」問題。我們正在就這個話題進行內部討論,並希望得到更多聽衆的意見。使用SQL返回JSON字符串
我需要將數據存儲在具有普通列和行的傳統MS SQL Server
表中。我有時需要返回一個DataTable
到我的web應用程序,而其他時間我需要返回一個JSON
字符串。
目前,我將表返回到中間層並將其解析爲JSON
字符串。這似乎大部分工作得很好,但偶爾會花費一些時間處理大數據集(解析數據,不返回表)。
我在考慮修改存儲過程以選擇性返回DataTable
或JSON
字符串。我會簡單地向SP添加一個@isJson bit
參數。
如果用戶想要的字符串,而不是表中的SP將執行這樣的查詢:
DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@results ',', '') + '{id:"' + colId + '",name:"' + colName + '"}'
FROM MyTable
SELECT @result
這將產生類似如下:
{id:"1342",name:"row1"},{id:"3424",name:"row2"}
當然,用戶可以也可以通過將false傳遞給@isJson參數來獲取表格。
我想明確一點,數據存儲不受影響,也不存在任何現有的視圖和其他過程。這只是對一些存儲過程的結果的改變。
我的問題是:
- 有沒有人在一個大的應用程序嘗試呢?如果是這樣,結果如何?
- 你看到了什麼問題/你會用這種方法期待什麼?
- 除了以這種方式修改存儲過程或解析中間層中的字符串之外,是否有更快的方式從SQL Server中的錶轉換爲JSON?
告訴我們更多關於中間層的信息。什麼花了這麼久?它是編譯代碼嗎?應該很有可能編寫一個將記錄集轉換爲JSON並具有相當足夠性能的應用程序。 – ErikE 2012-07-16 20:52:13
假設你正確地逃避你的特殊字符,這是可行的......但是......你爲什麼? SQL Server是一個糟糕的字符串解析引擎,並且您有一個內置的XML引擎,可以始終以相對有效的方式吐出符合要求的XML。 – 2012-07-16 20:53:49
@ErikE大多數表格都很快轉換成json。這只是因爲我們正在解析FullCalendar表。中間解析簡單地接受表並使用foreach循環遍歷字段和行來構建字符串。我們可以在中間修復一些東西以使其更快地執行,但是如果我們可以通過SQL來避免額外的步驟,那麼......爲什麼不呢? – davids 2012-07-16 20:54:56