SQL Server if else语句无法正常工作

时间:2016-07-23 19:36:03

标签: sql-server

我在SQL Server中创建了用户定义的函数,但不知何故逻辑不正确,它总是执行else语句;请帮忙!

CREATE FUNCTION shipSelection
    (@Item_No varchar(20),@itemname varchar(20))
RETURNS varchar(100)
AS
BEGIN
    declare @weight float
    declare @demention float
    declare @density float
    declare @result varchar(100)

    SET @weight = (SELECT Item_Weight FROM Items 
                   WHERE Item_No = @Item_No AND Name = @itemname) 
    SET @demention = (SELECT Dimention FROM Items 
                      WHERE Item_No = @Item_No AND Name = @itemname)

    SELECT @density = @weight / @demention

    IF @density > 100
    BEGIN
        SET @result = 'LOW DENSITY CAN USE ANY TYPE SHIPS';
    END
    ELSE IF @density > 300
    BEGIN
       SET @result = 'MEDIUM DENSITY CAN USE MEDIUM SHIPS';
    END
    ELSE IF @density > 500
    BEGIN
        SET @result = 'MEDIUM DENSITY WANT TO USE HUGE SHIPS';
    END
    ELSE 
    BEGIN
       SET @result = 'DONT WANT TO CARE ABOUT SHIPS TOO SMALL DENSITY ITEM';
    END

    RETURN @result
END

SELECT 
    dbo.shipSelection('I010', 'asus x555l') AS TRANSPORT_SHIP_TYPE

2 个答案:

答案 0 :(得分:4)

你拥有逻辑的方式,它总是会遇到第一种情况(> 100)或其他情况(< 100)。请先尝试检查最大的数字。

永远不会打到> 300例,因为它会使用>首先是100个案例。

如果你总是点击else语句,你需要检查你的值是否真的大于100.听起来好像不是。

答案 1 :(得分:1)

我敢打赌,你的一个查询会返回一个NULL值。由于null不是数字且无法与您的else语句进行比较,因此在null的情况下将被命中。您可以通过使用COALESCE将返回null的查询值设置为已知值来阻止此操作。

    SET @weight = (SELECT COALESCE(Item_Weight,0) FROM Items 
                   WHERE Item_No = @Item_No AND Name = @itemname) 
    SET @demention = (SELECT COALESCE(Dimention,0) FROM Items 
                      WHERE Item_No = @Item_No AND Name = @itemname)