我编写了一个函数来查找某事物的基本单位(数据存储在表格中)。 这就是表格的样子:
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'调用该函数,它应该返回“tab”。如果baseunit列是基本单元,则其包含值0,否则为其baseunit的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 pcode=@derpack)
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
我已尝试过递归和迭代,但它似乎无法工作。如果有人可以指出我出错的地方,这将是一个很大的帮助。
答案 0 :(得分:2)
我试图纠正一些错误,这是代码:
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 pcode=@derpack)
if( @baseunit = 0)
begin
set @pname = ( select packname from packing where pcode=@derpack)
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,它返回'tab'。在第二个选择中出现问题,您将'pcode'与'@ baseunit'进行比较,而不是'@packpack'。
希望有所帮助。作为旁注,您还可以在单个选择中选择“baseunit”和“pname”列,而不是两次。