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

如何通过求和查询更新SQL表中Name为'Total'的指定行

计算列总和并更新到指定行的SQL实现

需求:计算SqlInsertST2表中Class列之后所有列的数值总和(结果除以10000000),并将计算结果更新到表内Name = 'Total'的对应行中。

原代码问题分析

原代码拼接的UPDATE语句存在语法错误:SET子句缺少列名与计算值的对应关系,直接罗列SUM结果不符合UPDATE 表 SET 列名=值, 列名2=值2...的语法规范;另外ISNUMERIC函数对部分特殊字符(如货币符号)的判断不准确,建议改用更可靠的类型转换函数。

修正后的代码

DECLARE @sum_query NVARCHAR(MAX) = '';

-- 拼接每个列的更新片段:列名 = 该列的总和计算值
SELECT 
    @sum_query = @sum_query + QUOTENAME(column_name) + ' = ISNULL(SUM(TRY_CONVERT(Float, ' + QUOTENAME(column_name) + '))/10000000, 0), '
FROM 
    information_schema.columns
WHERE 
    table_name = 'SqlInsertST2'
    AND ordinal_position > (SELECT ordinal_position
                            FROM information_schema.columns
                            WHERE table_name = 'SqlInsertST2'
                              AND column_name = 'Class');

-- 移除末尾多余的逗号
IF LEN(@sum_query) > 0
    SET @sum_query = LEFT(@sum_query, LEN(@sum_query) - 1);

-- 拼接完整的UPDATE语句
SET @sum_query = 'UPDATE ' + QUOTENAME('SqlInsertST2') + ' SET ' + @sum_query + ' WHERE Name = ''Total''';

-- 执行动态SQL
EXEC sp_executesql @sum_query;

代码逻辑说明

  1. 遍历Class列之后的所有列,为每个列生成列名 = 总和计算值的语句片段
  2. 使用TRY_CONVERT替代ISNUMERIC,精准判断并转换数值类型,避免非数值内容转换报错
  3. 移除拼接过程中产生的末尾多余逗号,保证SQL语法合法
  4. 拼接完整的UPDATE语句并执行,完成指定行的数值更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:40:28