[SQL]避開 STRING_AGG 使用時的長度限制

避開 STRING_AGG 的長度限制

臨時收到一個蠻特別的問題,把處理方式整理一下,原本的問題是因為 SQL Server 提供了一個新的 STRING_AGG 的函數,就可以取代以前我們時常在前端,把收到資料的時候設法自己組成一個長字串的做法給簡化了。

下面這個是我們的範例,可以將我們需要產出的資料,本來是很多筆的,就合併成為一筆直接拿到報表去輸出

這樣的使用在一般狀況下都沒有問題,但是剛好今天遇到的狀況是資料筆數太多的時候,則就會像下圖一般,會爆出一個字串長度超出的問題,因此造成程式在執行的時候發生異常。

從上述的錯誤訊息中看起來,因為她去判斷資料的欄位型態,因此透過 STRING_AGG 產生出來的欄位也會跟原本欄位相同型態,就會發生 CHAR/VARCHAR 欄位不能超出 8000 的限制而引發異常。因此知道原因之後,我們就可以從訊息中找到修改的方式,這裡我們可以使用兩種方法來做調整。

方法一:利用 CAST 轉型來避開問題

方法二:改利用 FOR XML 來處理

透過上述兩個方法,總算解決一個異常,如果有朋友要使用 STRING_AGG 的時候,要特別注意一下囉。