|
|
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Есть у меня табличка в которой несколько полей и одно из них идентификатор товара. Товар представлен другой таблицей в которой иерархическая структура. Т.е есть группы товара и просто товары расположенные в группах. Глубина вложенности 10 уровней. И есть у меня хранимая процедура которая по Id товара строит полный код товара (т.е. строку состоящую из Id всех владельцев данного товара). Построенный Id она возвращает в OUTPUT параметре. Задача отсортировать указанную табличку по полному коду. Т.е. добавить в нее поле "Полный код" заполнить его значениями, и отсортировать (или сделать SELECT.... ORDER BY) Помогиет сделать это _быстро_ потому как я не нашел никакого другого варианта кроме как использовать курсор. Но получается слишком медленно. Хотелось бы что нибудь вроде Код: plaintext 1. Но как это сделать в MS SQL 7.0????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 11:18:36 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
все верно, и если значение Full_id можно сформировать одним SELECTOM то Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 12:14:34 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
все верно, и если значение Full_id можно сформировать одним SELECTOM то Как раз нельзя. Я полный код делаю Несколкими SELECT-ами в цикле пока не дойду до верхнего уровня дерева. Может кто расскажет как сделать полный код одним селектом при условии что дерево основано на двух полях Id и ParentId/ Причем полный код должен начинаться с Id корня дерева и заканчиватся Id элемента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 12:21:25 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
имхо, если вложенность ограничена, должно быть что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 13:11:26 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Вам надо сделать процедуру, расчитывающую пути для все таблицы целиком, а не для одного товара. Что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. Вот после и сортировать можно. С уважением, Александр Степанов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 13:13:27 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
To Luchkin Dmitry Вариант с жесткими ограничениями по вложенности уровней мне не нравиться, так как пытаюсь писать универсальную систему и все возможно что в будущих версиях количество уровней будет увеличено :) Но все равно спасибо за идею To Александр Степанов Вот что то такоя мне и мерещилось в моих раздумьях, на эту тему перед тем как я обратился сюда с вопросом, спасибо вам что прояснили мои мысли. Именно так и сделаю. Вдруг чего не получится будут взывать о помощи поновой :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 14:55:01 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
> Помогиет сделать это _ быстро _ Храни полный путь до записи в дереве в качестве атрибута этой записи, а не вычисляй его при обращении. Тогда это будет быстро. Вычисление пути должно производиться при помещении записи в дерево - один раз. А потом только использоваться. Да, под хранение путей придется потратить дополнительное место в БД. Но - одно из двух. Либо скорость, либо размер БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 14:55:13 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Однако, размерчик окажется ещё тот... Я для себя когда это решал, посчитал, что такая полная сортировка потребуется только в отчётах, а там уже и подождёт пользователь, ничего с ним не случится. Поэтому сделал SP, которая перегоняет мне из обычного справочника во временный, в котором не одно поле для сортировки, а столько, сколько уровней. Что-то вроде [GrpTop] [int], [GrpTop-1] [int], ... [Grp1] [int], [ID] [int], [Name] [varchar]. При этом структура генерится "на лету", в зависимости от реальной вложенности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 15:09:23 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
To Garya Ну вопервых приоткрою завесу над своей задачей :) Я оптимизирую работу самописной конфигурации 1С, в которой есть справочник с иерархической структурой "Справочник.Товаров" и есть остатки которые необходимо сортировать в соответствии с иерархией. Так что изменять структуру базы и создавать в ней тригера, а это видимо самый удобный способ вычисления полного кода, мне не хочется, хотя это возможно (правда тригера в 1с-ной базе еще не пробовал). To Luchkin Dmitry Т.е. изначально нужно пробежаться по базе и вычислить максимальное количество уровней а потом создать временную таблицу с таким же количеством полей для сортировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 15:20:12 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Хотелось бы что нибудь вроде UPDATE Talble1 SET Full_id = Get_full_ID(T_id) а так нельзя? Код: plaintext 1. 2. Код: plaintext 1. 2. ксожалению в 1С не силен, так что другого ничего предложить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 15:34:49 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
у каждого элемента справочника есть ID, ParentID и Lev. Последний вычисляется как раз при изменении средства. Во всяком случае, если при 10 уровнях, да 10 char на уровень, да 10'000 хотябы позиций, -- уже скока... Уже до фига получается зря почти в базе лежит. а ещё индекс по нему наверняка... Впрочем, что кому нравится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 15:35:43 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
TO Nickolay Так нельзя мне не нужно одним значением заполнить всю таблицу, мне нужно присвоит каждому элементу свой полный код, а твой вариант предлагает одно значени записать всем подряд. TO Luchkin Dmitry Не понял о чем ты.... разясни подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 16:03:14 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Я о том, что поле для полной сортировки, как предлагается, будет занимать... большой объём. А у меня хранится только уровень вложенности (int). Поэтому максимальный уровень вложенности получается select @MaxLev= MAX(Lev) from dict. исходя из этого и формируется строка с запросом на формирование справочника для отчёта типа такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 16:40:23 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Ну так я ж не храню это в базе, я строю временную таблицу в которую добавляю поле которое и заполняю впоследствии полными кодами :). Авот совет Александр Степанов мне не подошел. Потому как у меня есть временная таблица в которой только частичная выборка товара из справочника товаров. Т.е. в моей выборке нет всей ветки от корня и до последнего вложения. Вся ветка находится в отдельной таблице с которой моя временная связаны по идентификатору товара. И заполнять полныи кодами мне необходимо не таблицу справочника а мою временную. А рассматривать вариант в котором сначала создается указаным образом временная таблица со всеми полными кодами справочника, а потом присоединять ее к моей выборке, не будем ибо как громоздко это очень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 17:09:00 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Тогда должен подойти этот вариант, он расчитает пути только для нужных ID: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. С уважением, Александр Степанов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2002, 19:21:28 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Я тут в своё время писал, может подойдёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 10:01:25 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
To Александр Степанов Я вообщем то как раз и подумывал вместо @Level использовать значение ParentId для заполнения временной таблицы полными кодами. Вы подтвердили мои подумывания. Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 11:05:03 |
|
||
|
Помогите заполнить таблицу значениями возвращаемыми ис ХП (T-SQL 7.0)
|
|||
|---|---|---|---|
|
#18+
Все получилось!!!!! Единственное что пришлось изменить так это вместо первого Инсерта использовал Апдейт. Так как у меня уже была построенная выборка котрую необходимо заполнить товарами. Ускорение по сравнению с методом который использовал курсор и вызов хранимой процедуры просто бешенное :) Еще раз большое спасибо за помощь!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2002, 11:54:58 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3396&tid=1819576]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 194ms |
| total: | 326ms |

| 0 / 0 |
