平常我輸出json都直接用stringbuilder自己從資料庫一行一行組起來,然後response write輸出,一般沒什麼問題,不過這次輸出資料量稍大,一萬筆資料26個欄位,一行一行來組字串花很了大概5分鐘之久,搜尋一下發現原來sql內本來就有直接用for json auto來組成json。例如
select * from table for json auto
這樣就會組出JSON資料格式,相同在有一萬筆的狀況下,全部組完的速度不需要一秒
但是後來發現它只能固定組出幾筆欄位,後面就不見了,計算一下發現固定是2033個字元,之後就會被截斷。
google這類問題後發現原來這是因為用資料庫欄位去接時的問題,SQLString要改用以下的語法,使用最大的資料長度即可。
SELECT CONVERT(NVARCHAR(MAX),select * from table for json auto)
另外發現一個問題是當產生JSON時,會把null的欄位直接省略,如果null也要能顯示,則要再加上, INCLUDE_NULL_VALUES,所以上面這句就可以變成這樣
SELECT CONVERT(NVARCHAR(MAX),select * from table for json auto, INCLUDE_NULL_VALUES)
參考資料: https://blog.darkthread.net/blog/for-xml-result-truncated/
文章標籤
全站熱搜