STRING_AGG聚合结果超出8000字节错误限制

Ere*_* G. 36 sql sql-server string aggregate string-aggregation

我需要按组组合文本。我发现了一个名为 的函数STRING_AGG

select c.id
, c.bereichsname
, STRING_AGG(j.oberbereich,',') oberBereiches 
from stellenangebote_archiv as j
join bereiche as c on j.bereich_id = c.id
group by c.id, c.bereichsname
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

STRING_AGG 聚合结果超出了 8000 字节的限制。使用 LOB 类型以避免结果截断。

Bar*_*den 61

尝试如下

select c.id
, c.bereichsname
, STRING_AGG( CAST(j.oberbereich as nvarchar(MAX)),',') oberBereiches 
from stellenangebote_archiv j
join bereiche c on j.bereich_id = c.id
group by c.id, c.bereichsname
Run Code Online (Sandbox Code Playgroud)

所以问题是连接字符串的长度超出了结果列的字符限制。

因此,我们通过将所有值转换为“nvarchar(max)”来设置 max 的限制来解决问题。

“STRING_AGG()”函数返回它得到的内容。

  • 如果你添加一两句话来解释为什么它有效,这将是一个更好的答案。 (6认同)
  • @idstam 如果参数为“NVARCHAR(1...4000)”,则返回类型为“NVARCHAR(4000)”。与 `NVARCHAR(1...8000)` -> `NVARCHAR(8000)`、`NVARCHAR(MAX)` -> `NVARCHAR(MAX)` 相同,我希望它有所帮助:[STRING_AGG](https://learn. microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver16#return-types) (6认同)

小智 5

Baris Erden 非常感谢您的帮助..它对我有用

SELECT Employee_Name, STRING_AGG( CAST(Project_Name AS VARCHAR(MAX)), ',') as all_project_names
FROM [10.180.0.63].ware_dw.dbo.employee_360
group by Employee_Name;
Run Code Online (Sandbox Code Playgroud)