函数总是返回null
我写了一个函数来查找某个东西的基本单位(数据存储在一个表中)。 这是表的样子:函数总是返回null
pcode packname baseunit
1 BU 0
2 DU 1
3 du1 2
4 tab 0
5 strip 4
6 box 5
7 cart 6
在这里,我想对于一个给定的代码返回的基本名称。例如,如果我用'7'调用函数,它应该返回“选项卡”。如果它是基本单位,则baseunit列包含值0,否则其base unit的pcode包含值。我想找到层次结构中最上面的项目。 我已经写了一个函数,它总是返回null。
alter function [dbo].[findbasepack1](@derpack varchar(10))
returns nvarchar(50)
as
begin
declare @baseunit numeric(18,0)
declare @pname nvarchar(50)
set @baseunit= (select baseunit from packing where [email protected])
if(@baseunit = 0)
begin
set @pname = (select packname from packing where pcode = @baseunit)
end
else
begin
set @pname = dbo.findbasepack1(@baseunit)
end
return @pname
end
GO
我已经尝试在递归和迭代,但它似乎并没有工作。如果有人能指出我出错的地方,这将会有很大的帮助。
我试图纠正一些错误回报,这是代码:
ALTER FUNCTION [dbo].[findbasepack1]
(
@derpack int
)
RETURNS nvarchar(10)
AS
begin
declare @baseunit numeric(18,0)
declare @pname nvarchar(10)
set @baseunit= (select baseunit from packing where [email protected])
if(@baseunit = 0)
begin
set @pname = (select packname from packing where [email protected])
end
else
begin
set @pname = dbo.findbasepack1(@baseunit)
end
return @pname
END
这是我用
CREATE TABLE [dbo].[packing](
[pcode] [int] NOT NULL,
[packname] [varchar](10) NOT NULL,
[baseunit] [int] NOT NULL
)
对于输入7返回 '标签' 的表。在第二个选择中,您将'pcode'与'@baseunit'而不是'@derpack'进行比较存在问题。
希望有所帮助。作为附注,您也可以在一次选择中同时选择“baseunit”和“pname”列,而不是执行两次。
很好,值得一提的是最大递归限制为32(在SQL Server 2012中) - 希望他的表中的数据不会下降到这么深。 – Phill 2014-09-04 07:19:25
This Works!谢谢。 @Phill感谢您的信息,我会尝试使用迭代。 – 2014-09-04 08:52:03
有趣的语法。我总是使用'SELECT @panme = packname from ...'。 – 2014-09-04 06:55:06
您是否尝试过使用调试器来遍历代码? – 2014-09-04 06:55:35