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

SQL Server存储过程中如何获取三列最大值及解决语法报错问题

问题修复方案

报错原因

你当前代码报错的核心原因是单条SELECT语句中出现了两个FROM子句,违反SQL基本语法规范。

修复后的存储过程代码

CREATE PROCEDURE [dbo].[sp_GetClass]
    @surname nvarchar(50) = NULL, -- 给参数默认值,兼容未输入直接回车的场景
    @maxClass int OUT
AS
BEGIN
    SELECT @maxClass = MAX(Score)
    FROM MissLess
    -- 行转列把三门课列拆成行,统一计算最大值
    CROSS APPLY (
        VALUES (Programming), (Mathematics), (Physics)
    ) AS Scores(Score)
    WHERE 
        -- 姓氏为空/未输入时跳过筛选,否则模糊匹配
        (@surname IS NULL OR @surname = '' OR Surname LIKE '%' + @surname + '%')
END
GO

调整说明

  • 用CROSS APPLY关联行值构造器生成的派生表,将每条记录的Programming、Mathematics、Physics三个列拆分为单独的行,统一用MAX聚合计算最大值,符合SQL语法要求
  • 给@surname参数设置了默认NULL值,WHERE子句中增加了空值判断,未输入内容直接执行时会跳过姓氏筛选,返回全表所有三门课分数的最大值
  • 支持多记录匹配场景:如果同一姓氏有多条符合条件的记录,会自动取所有符合记录三门课中的全局最大值返回,如果需要返回每条记录各自的三门课最大值,可以修改输出逻辑适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:01