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

编写SQL自定义函数实现奖金乘3与重复奖金检测功能运行异常求助

问题分析

原代码存在以下问题:

  • 未实现奖金乘以3的计算逻辑
  • 重复奖金判断逻辑不符合需求:仅校验传入奖金和当前员工的存储奖金是否一致,没有统计同奖金对应的员工总数
  • 未给返回值设置兜底默认值,不满足错误条件时会返回NULL
  • 未处理数值转字符串的逻辑,无法兼容数字计算结果和文本提示的混合返回需求
修正方案

修正后的逻辑为:当传入的奖金对应的员工人数≥2时返回要求的提示文本,否则返回该奖金乘以3的计算结果,移除了无用的@workers参数。

CREATE FUNCTION newfunction
(
    @bonus AS INT
)
RETURNS VARCHAR(25)
AS
BEGIN
    DECLARE @bonus_worker_count INT
    DECLARE @return_value VARCHAR(25)

    -- 统计当前奖金对应的员工总人数
    SELECT @bonus_worker_count = COUNT(*)
    FROM Employeestbl
    WHERE Bonus = @bonus

    IF @bonus_worker_count >= 2
        SET @return_value = 'two workers have same bonus amount'
    ELSE
        -- 无重复时计算三倍奖金并转为字符串
        SET @return_value = CAST(@bonus * 3 AS VARCHAR(25))

    RETURN @return_value
END

调用方式:

SELECT *, dbo.newfunction(Employeestbl.Bonus) AS calculation_result
FROM Employeestbl
运行结果(匹配你的样例数据)
BonusWorkerscalculation_result
901two workers have same bonus amount
902two workers have same bonus amount
503150
404120
30590
20660
10730

如果你需要的逻辑是只要全表存在任意一笔重复奖金,所有行都返回提示,只需要把统计人数的SQL替换为以下代码即可:

SELECT @bonus_worker_count = COUNT(*)
FROM (
    SELECT Bonus
    FROM Employeestbl
    GROUP BY Bonus
    HAVING COUNT(*) >= 2
) AS duplicate_bonus

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:15:04