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

SQL Server存储过程创建失败:总分更新与平均分列添加问题

解决SQL Server存储过程报错问题

报错原因

你遇到的错误是因为在ALTER TABLE添加列的DEFAULT约束中,不能直接引用表中的其他列(比如Total)。SQL Server规定默认约束只能使用常量、常量表达式或变量,不允许引用同表的列名。

修正后的存储过程代码

create or alter procedure TotMarks
as 
begin
    -- 更新Chennai学生的Total列
    update sm
    set sm.Total = sm.Mark1 + sm.Mark2 + sm.Mark3
    from StudentMarks sm
    join CityMaster cm on sm.CityID = cm.CityID
    where cm.CityName = 'Chennai'

    -- 新增AvgMark列(指定精度避免默认精度问题)
    alter table StudentMarks
        add AvgMark decimal(10,2)

    -- 计算所有学生的平均分
    update StudentMarks
    set AvgMark = case 
                    when Total is not null then Total/3
                    else (Mark1 + Mark2 + Mark3)/3 -- 兼容Total为NULL的学生
                  end
end

关键说明

  • 新增AvgMark列时,不能设置依赖Total的默认约束,因为默认约束无法动态引用其他列的实时值。
  • 更新平均分的逻辑中,通过CASE分支兼容两种情况:Chennai学生用已更新的Total计算,其他学生直接用原始分数计算,确保所有学生都能得到有效平均分。
  • 给decimal类型指定(10,2)的精度,避免SQL Server使用默认精度可能带来的数值截断或精度丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:48:46