SQL Server函数问题:将负数转为NULL/零却全部变为零的求助
问题分析与修正
你的函数逻辑存在错误,导致非负数无法正确返回原值:
- 当输入
@value为非负数时,你声明了@days变量但未给它赋值,直接返回的是未初始化的变量(SQL Server中默认值为NULL),这就是结果不符合预期的原因。
修正方案
方案1:负数转为0,正数保留原值
CREATE FUNCTION planning.FN_test_return_zero_incaseof_negative_value (@value AS INT) RETURNS INT BEGIN RETURN CASE WHEN @value < 0 THEN 0 ELSE @value END END GO
方案2:负数转为NULL,正数保留原值
CREATE FUNCTION planning.FN_test_return_zero_incaseof_negative_value (@value AS INT) RETURNS INT BEGIN RETURN CASE WHEN @value < 0 THEN NULL ELSE @value END END GO
原函数错误点说明
原函数仅在@value < 0时返回0,但非负数分支没有将输入值传递给返回变量,直接返回未赋值的@days,导致返回NULL(若你看到正数被转为0,大概率是外部查询对NULL做了额外处理)。
内容的提问来源于stack exchange,提问作者jacktheripper
相关产品推荐
相关产品推荐

