Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Димамическое добавление имени "владельца" к текущей записи [D7, MSSQL]


Rav ©   (2007-02-18 20:58:00) 

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

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

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


Ega23   (2007-02-19 17:59:00) [1]


> Common Table Expressions (CTE) ?


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


Кщд   (2007-02-19 13:53:00) [2]

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


Empleado   (2007-02-19 13:22:00) [3]


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

Common Table Expressions (CTE) ?


Ega23   (2007-02-19 13:01:00) [4]


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


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

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


novill   (2007-02-19 12:10:00) [5]

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


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


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


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


novill   (2007-02-19 11:12:00) [7]

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


ЮЮ   (2007-02-19 11:02:00) [8]

Можно и 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


Val   (2007-02-19 10:18:00) [9]

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


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


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

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


Anatoly Podgoretsky   (2007-02-18 21:04:00) [11]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо