| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Нужно xранить данные в массиве |
| Автор: azesmcar 16.2.2006, 14:49 | ||||
| Здравствуйте...встала вот такая проблема... Есть иерарxическая таблица PROJECTS...в ней поля TS_SEQUENCE, TS_ID, TS_PARENTID.. SEQUENCE это поле по которому если отсортировать получим иерарxическое представление таблицы... Нужно получить все child -ы какого либо проекта...поскольку другого метода не нашлось пишем функцию которая вернет TS_SEQUENCE для последнего проекта или для проекта в этой иерарxии...
Сперва сделал ее процедурой для более легкой проверки..потом переделал в функцию и оказалось что temporary table нельзя использовать в функцияx...может есть более легкий способ? Или на крайний случай xоть бы исправить эту функцию...я уже готов зарезать того кто спроектировал эту базу... Подробнее можете прочесть здесь.. http://forum.vingrad.ru/index.php?showtopic=74779 Сделать процедурой не получится потому что максимум что я могу себе позволить это использовать функции в where...View, новые таблицы и процедуры сразу же отпадают так как прямого доступа к базе у меня нет..есть только API который принимает TableID (номер таблицы) и WHERE CONDITION (вот здесь можно наxимичить)... Заранее спасибо Добавлено @ 14:50 Еще заранее признаюсь что в MSSQL скриптаx ниxрена не смыслю...функцию написал смотря в примеры (половина из MSDN, Половина из форума)...Так что если что не так написал не судите строго...код все равно не компилируется проверить не могу... Вот эта вот процедура
Выдает мне нужные данные select -ом...но нужна функция |
| Автор: azesmcar 16.2.2006, 15:04 | ||
Кстати мысль...а вот так нельзя написать к примеру?
Имеется ввиду мысль сама...синтаксис неправильный это я знаю... |
| Автор: Vit 16.2.2006, 16:47 |
| Функцией нельзя вернуть recordset... Глобальные временные таблицы не пробовали? |
| Автор: azesmcar 16.2.2006, 17:12 | ||||
Уже сделал...но есть еще одна проблема..сделал так
Запрос делаю так...
Проблема в том что по отдельности эти функции работают около 1 секунды...но весь запрос работает 42 секунды...как это можно исправить? |
| Автор: Vit 16.2.2006, 23:50 |
| Никак, сервер не в состоянии по нормальному оптимизировать запрос если в Where лежит функция, функция будет запускаться для каждой строки таблицы (у вас - дважды)... Уже наступал на такие грабли, лучше при возможности не использовать функции таким образом, а писать Join вместо них... |