Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сконструировать запрос? / 6 сообщений из 6, страница 1 из 1
28.06.2002, 13:42:32
    #32034274
Alex Mey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
Уважаемые мастера.

Помогите.
У меня есть таблица, отражающая древовидную структуру вида -

ID, ID_Parent и другие поля.

Я написал хранимую процедуру, в которую передаётся идентификатор записи - @ID, а она на выходе выдаёт все её дочерние записи, т.е. у которых ID_Parent = @ID. И ещё, для каждой из возвращённых записей добавляется логическое поле - hasChilds, указывающее есть ли у этой дочерней записи свои дочерние.

Я написал её используя серверный курсор. Но вычитал, что их использовать крайне не рекомендуется, так как в два раза уменьшают быстродействие. И на самом деле - роботает крайне медленно.

Если кто знает - спасите !!! Можно ли это же самое сделать с использованием T-SQL запроса?

Заранее благодарен, Александр.
...
Рейтинг: 0 / 0
28.06.2002, 13:46:15
    #32034276
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
Дерево - ID, PARENTID, NAME
...
Рейтинг: 0 / 0
28.06.2002, 14:28:26
    #32034283
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
Это делается с помощью цикла и временной таблицы строчек в 15.
Попробуйте сами
...
Рейтинг: 0 / 0
28.06.2002, 14:36:36
    #32034285
Alex Mey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
Спасибо за ссылку.
Но это всё общие слова.
Я просто спросил - можно ли выполнить запрос (помимо выбора всех дочерних ещё указать есть ли у выбранных свои дочерние) без использования курсора и если можно, то как?
...
Рейтинг: 0 / 0
28.06.2002, 15:10:02
    #32034296
Dominic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
Вот такой запрос я использую для подгрузки в TreeView дочерних узлов к раскрываемому пользователем:

SELECT N.classid_child, OP.nodeid, OP.objectid, OP.objectname, OP.number,
COUNT(OC.objectid) As count_child
FROM nodes N INNER JOIN (objects3 OP LEFT JOIN objects3 OC
ON OC.objectid_parent = OP.objectid)
ON N.nodeid = OP.nodeid
WHERE OP.objectid_parent = @id
GROUP BY N.classid_child, OP.nodeid, OP.objectname, OP.objectid, OP.number
ORDER BY OP.number

Объяснять особо некогда, бегу домой. Галопом:

nodes - таблица описаний иерархии классов объектов, расположенных на рассматриваемом узле
objects3 - дерево объектов со структурой objectid, objectid_parent
псевдонимы тадлиц OP и OC - родители и дочки соответственно

Возвращает все дочерние узлы по отношению к рассматриваемому в @id, а также число дочерних к дочерним - COUNT(*). Если ненулевое число - то в TreeView создается мнимый узел (+), сигнализирующий пользователю, что там что-то есть. Он раскрывает, событие Expand, и все по-новой. Для твоей задачи может быть расширен дополнительным LEFT или INNER JOIN

Все, удачи
...
Рейтинг: 0 / 0
29.06.2002, 22:30:41
    #32034406
MarchCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сконструировать запрос?
to: snake
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сконструировать запрос? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]