Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.046 c
15-1175870246
oldman
2007-04-06 18:37
2007.05.06
Спасибо Биллу Гейтсу, за то, что нам так весело...


3-1171605638
Merry
2007-02-16 09:00
2007.05.06
IBase: блокировка доступа к редактируемой записи


2-1176705162
allucard
2007-04-16 10:32
2007.05.06
Как созданный класс сделать дочерним классу TForm?


2-1176841273
Dlh
2007-04-18 00:21
2007.05.06
Считать числа и преобразовать.


6-1162737990
Student2007
2006-11-05 17:46
2007.05.06
Удалённое отключение компьютеров...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский