【问题标题】:Function with two inputs returns null value具有两个输入的函数返回空值
【发布时间】:2022-01-13 23:53:30
【问题描述】:

我需要创建一个函数来计算给定州和应征税额的销售税。如果状态在 SalesTax 表中不存在,则该函数应返回 0。但是当我运行该函数时,即使状态在 SalesTax 表中,它也只会返回空值。它应该返回的是税率(每个输入的州)*数量(也输入)

GO
Create or alter function TaxGivenAState
(@State char(2),@Quantity NUMERIC)
Returns NUMERIC 
as 
BEGIN
    Declare @SalesTaxTotal NUMERIC 
    Declare @TaxRate NUMERIC

    Select @SalesTaxTotal = @TaxRate*@quantity
    From SalesTax s
    Where s.TaxRate = @TaxRate and s.[State]=@State and @TaxRate=s.TaxRate
    If(@SalesTaxTotal=0)
    BEGIN
        Return 0
    END
    ELSE
    BEGIN
        Return @SalesTaxTotal
    END
    return @salestaxtotal
END

【问题讨论】:

  • 提供您的税表示例和预期结果表。
  • @Quantity NUMERIC 你真的明白这是做什么的吗?精度和比例的默认值是什么?这些适合您的使用吗?我经常看到部分税率 - 你的代码没有。不要假设 - 始终指定可以变化的数据类型的属性。

标签: sql sql-server tsql


【解决方案1】:

你还没有用任何值初始化@TaxRate,所以当你将它与@quantity相乘时它是null,这将始终导致一个空值:

Declare @TaxRate NUMERIC
Select @SalesTaxTotal = @TaxRate*@quantity

FROM 组件在此处具有虚拟零效应,因为您根本没有使用表中的值。

试试这个,我已经删除了你查询中不相关的部分

GO
Create or alter function TaxGivenAState
(@State char(2),@Quantity NUMERIC)
Returns NUMERIC 
as 
BEGIN
    Declare @SalesTaxTotal NUMERIC 

    Select TOP 1 @SalesTaxTotal = s.TaxRate*@quantity
    From SalesTax s
    Where s.[State]=@State

    return @SalesTaxTotal
END

如果您想将税收类型指定为参数,那么您应该将其作为参数包含在内,或者提供查询以确定要使用的税率类型(如果您提供税的 sn-p)表,我们也许可以在此处建议您出错的其他地方。

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2021-02-03
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多