Форум: "Базы";
Текущий архив: 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