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
相关产品推荐
相关产品推荐

