我在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
答案 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)