平常我輸出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/

arrow
arrow
    文章標籤
    JSON database sql
    全站熱搜

    夜市 小霸王 發表在 痞客邦 留言(0) 人氣()