Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Димамическое добавление имени "владельца" к текущей записи   Найти похожие ветки 

 
Rav   (2007-02-18 20:58) [0]

Доброго времени суток!

Есть таблица с полями (иерархическая структура "дерево")
ID int NOT NULL  - ключ
OWNER_ID int NULL - ссылка на запись "владельца"
NAME str64 NULL  - какой либо текст
Можно либо каким-либо образом при "динамически" получить поле OWNER_NAME_ROOT\OWNER_NAME_1\...\NAME, т.е. сгенерить своего рода "путь", например для записи
"ОТДЕЛ 1" получить "ООО РОГА И КОПЫТА\ФИЛИАЛ 10\ОТДЕЛ 1"

Можно ссылку на статью, где почитать.
Спасибо!


 
Anatoly Podgoretsky ©   (2007-02-18 21:04) [1]

> Rav  (18.02.2007 20:58:00)  [0]

Можно конечно, обычное вычислимое поле, только вот смущают неизвестное OWNER_NAME_ROOT и таинственное ...


 
Rav   (2007-02-18 21:15) [2]


> неизвестное OWNER_NAME_ROOT

Ну это я так обозначил не совсем правильно....
Имеется в виду корневая запись (поле NAME), затем 2 уровень (поле NAME).... и т.д. до нужной записи (поле NAME)


 
Val ©   (2007-02-19 10:18) [3]

с оглядкой на сервер, подозреваю, что нужно создавать хп.


 
ЮЮ ©   (2007-02-19 11:02) [4]

Можно и UDF. В предложенном варианте, правда наоборот, root в конец помещается, да и разделяется только пробелами, но смысл, надююсь, понятен

CREATE FUNCTION dbo._UeDepartment_GetFullShortName(
 @Department int, @OnDate datetime
) RETURNS varchar(255) AS BEGIN

-- возвращает цепочку аббревиатур подразделений
-- <ShortName> <Parent.ShortName> <Parent.Parent.ShortName>

 DECLARE @Result varchar(255)

 DECLARE @Parent int
 DECLARE @ShortName varchar(255)

 SELECT
   @Result = ShortName, @Parent = ParentDepartment
   FROM E_Newdepartments
   WHERE ID = dbo.UeDepartment_GetLastNewDepartment(@Department, @OnDate, 0, 0)

 WHILE @Parent > 0 BEGIN
   SELECT
     @ShortName = ShortName, @Parent = ParentDepartment
     FROM E_Newdepartments
     WHERE
       ID = dbo.UeDepartment_GetLastNewDepartment(@Parent, @OnDate, 0, 0)
   SET @Result = @Result + " " + @ShortName
 END

 RETURN @Result
END


 
novill ©   (2007-02-19 11:12) [5]

Рекурсивная ХП - самое разумное.


 
Ega23 ©   (2007-02-19 11:33) [6]


> Рекурсивная ХП - самое разумное.


не надо тут никаких рекурсий. Здесь нет обхода "от корня к листу", тут обратный - "от листа к корню". Достаточно While с условием Owner_ID is null


 
novill ©   (2007-02-19 12:10) [7]

> [6] Ega23 ©   (19.02.07 11:33)
Да


 
Ega23 ©   (2007-02-19 13:01) [8]


> novill ©   (19.02.07 12:10) [7]


Я просто столько рекурсий за последний год на TSQL написал, что меня уже тошнит только од одного упоминания о них...   :)

Кстати, говорят, что в 2005 какие-то механизмы интересные для рекурсий появились...


 
Empleado ©   (2007-02-19 13:22) [9]


> Кстати, говорят, что в 2005 какие-то механизмы интересные
> для рекурсий появились...

Common Table Expressions (CTE) ?


 
Кщд ©   (2007-02-19 13:53) [10]

Ega23 ©   (19.02.07 13:01) [8]
>Кстати, говорят, что в 2005 какие-то механизмы интересные для рекурсий >появились...
синтаксис, на мой взгляд, более громоздкий и менее прозрачный, нежели в oracle
но факт присутствия - бесспорен)


 
Ega23 ©   (2007-02-19 17:59) [11]


> Common Table Expressions (CTE) ?


Не знаю, я ещё не ковырял.



Страницы: 1 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1176037330
Strate
2007-04-08 17:02
2007.05.06
Отладка с параметрами


1-1170623927
Blacksus
2007-02-05 00:18
2007.05.06
ловушка и форма


15-1175870706
Pazitron_Brain
2007-04-06 18:45
2007.05.06
Кто-нибудь паял самодельный блок питания для ноутбука?


15-1175764676
Ricks
2007-04-05 13:17
2007.05.06
Редактор значков (ico)


2-1176878709
Gentos
2007-04-18 10:45
2007.05.06
bmp -> jpg