Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли создать функцию  [new]
Утюг
Member

Откуда: Ростов н/Д
Сообщений: 137
Снова дерево, вернее, полный путь
create table test (code char(9), id char(9), parentid char(9))
insert into test values('001', '1', '2')
insert into test values('002', '2', '3')
insert into test values('003', '3', '4')
insert into test values('004', '4', '5')

declare @child char(9), @parent char(9), @full char(90)
set @child =  '1'
set @full = ''
while 1=1 begin
	set @parent=(select parentid from test where id = @child)
	set @full = RTRIM(LTRIM((select code from test where id = @child))) + '/' + @full
	if @parent is null break	
	set @child = @parent
	select @full
end

В результате получается количество рекордсетов=количество уровней. А можно ли из этого создать функцию, возвращающую конечный @full?
6 июн 06, 10:28    [2743823]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
saint
Member

Откуда: Архангельск
Сообщений: 2262
а что мешает?
6 июн 06, 10:47    [2743916]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
Утюг
Member

Откуда: Ростов н/Д
Сообщений: 137
Не понятно, куда returns вставлять
6 июн 06, 11:00    [2743997]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Утюг
Не понятно, куда returns вставлять
Сделайте Multi-statement табличную функцию, в которой в своем цикле вставляйте значения в табличную переменную, с проверкой в конце цикла @@rowcount на равенство нулю для завершения цикла, а за циклом уже и сказать ретюрн.
6 июн 06, 11:04    [2744012]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
Утюг
Member

Откуда: Ростов н/Д
Сообщений: 137
tpg
Сделайте Multi-statement табличную функцию

Вы меня простите, но, как в анекдоте, "пальцем покажите", ибо для меня это хоть и по-русски написано, но все-равно, как на хинди.
6 июн 06, 11:11    [2744054]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create_7r1l.asp
6 июн 06, 11:21    [2744117]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
aleks2
Guest
CREATE FUNCTION Path(@child char(9))
returns char(90)
as
begin
declare @full char(90)
set @full = ''
select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' + @full  from test where id = @child
while @@rowcount>0 begin
    select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' + @full  from test where id = @child
end
return @full
end
6 июн 06, 11:30    [2744185]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
aleks2
Guest
CREATE FUNCTION Path(@child char(9))
returns char(90)
as
begin
declare @full char(90)
select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' from test where id = @child
while @@rowcount>0 begin
    select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' + @full  from test where id = @child
end
return @full
end
6 июн 06, 11:32    [2744198]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли создать функцию  [new]
Утюг
Member

Откуда: Ростов н/Д
Сообщений: 137
Мне так неудобно... Пока я пытался разобраться с BOL'ом, за меня уже все сделали. Спасибо.
6 июн 06, 11:52    [2744320]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Можно ли создать функцию  [new]
f50
Member

Откуда: Россия
Сообщений: 456
aleks2
CREATE FUNCTION Path(@child char(9))
returns char(90)
as
begin
declare @full char(90)
select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' from test where id = @child
while @@rowcount>0 begin
    select @child=parentid, @full=RTRIM(LTRIM(code)) + '/' + @full  from test where id = @child
end
return @full
end


Хоть и много времени прошло, хочется сказать спасибо автору за такую прекрасную функцию, пользуюсь несколько лет, мои исходники правда в другом месте, и вот она снова понадобилась, зашел сюда и на сайте снова нашел!
25 сен 12, 09:44    [13216650]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить