You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STRING_AGG()转换错误:nvarchar转int失败问题排查

问题分析与解决思路:STRING_AGG赋值时的类型转换错误

问题场景

  • 将表的插入/更新触发器改造为Service Broker异步任务,通过XML变量传递INSERTED表数据到存储过程
  • 尝试用STRING_AGG()生成ID的逗号分隔列表,赋值给NVARCHAR(max)类型变量@ids时,触发错误:
    Conversion failed when converting the nvarchar value '1,2,3,...' to data type int
    

错误原因

核心是STRING_AGG语法错误:原代码中将分隔符,写在了函数括号外部,导致SQL Server将子查询解析为返回两个列(STRING_AGG(inserted.lo_location)的结果、常量,),而SET @ids = (SELECT ...)要求子查询返回单个标量值。这种情况下SQL会尝试对多列结果进行隐式转换,最终触发类型不匹配的错误。

解决思路与修正代码

修正STRING_AGG的语法,将分隔符作为函数的第二个参数传入(正确语法为STRING_AGG(expression, separator)),即可直接将聚合结果赋值给NVARCHAR(max)变量,无需额外CAST转换。

修正后的代码:

DECLARE @ids NVARCHAR(max) 
SET @ids = (
    SELECT STRING_AGG(inserted.lo_location, ',')
    FROM (
        SELECT
            X.query('.').value('(row/lo_Location)[1]', 'nvarchar(10)') AS lo_location
        FROM @inserted.nodes('inserted/row') AS T(X)
    ) AS inserted
)

内容的提问来源于stack exchange,提问作者Andye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:33:26