Я написал функцию, чтобы найти базовый блок чего-либо (данные хранятся в таблице). Это то, что таблица выглядит следующим образом:Функция всегда возвращает 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, если это базовый блок, в противном случае 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
Я попытался как в рекурсии, так и в итерации, но он, похоже, не работает. Это будет большой помощью, если кто-то может указать, где я ошибся.
Интересный синтаксис. Я всегда использую 'SELECT @panme = packname from ...'. –
Пробовали ли вы использовать отладчик для выполнения кода? –