Форум программистов, компьютерный форум, киберфорум
Наши страницы
Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
tolik
1

MSQL 7 (Как собрать Tree Node)

21.10.2007, 15:01. Просмотров 899. Ответов 9
Метки нет (Все метки)

ПРОБЛЕМА!!!
есть таблица
'create table struct_parent (struct_code int, struct_name varchar(50), struct_lev int, struct_parent int)'
struct_code - порядковый номер,
struct_parent - порядковый номер родителя (struct_code),
struct_lev - уровень вложенности

Делаем процедуру которая бы собирала всех детей да самого последнего по всем веткам от заданоого родителя. Процедура см. Ниже а ошипку еще ниж!!!
T-SQL
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
CREATE PROCEDURE [xxxx_procedure_] @struct_code_in int, @num_in int, @par_in int 
AS
declare @struct_code int
declare @struct_name varchar(50)
declare @struct_lev int
declare @struct_parent int
 
declare @kol1 int -- 
declare @_my_cursor varchar(20) -- переменая курсора
declare @_Struct_code_varchar varchar(5)
 
begin
 
set @_my_cursor = 'my_cursor_'
set @_my_cursor = @_my_cursor + convert(varchar(5), @par_in)
set @_Struct_code_varchar = convert(varchar(5), @struct_code_in)
set @kol1 = 0
    if @num_in = 0 
    begin
    create table ##zzzz_structs (struct_code int, struct_name varchar(50), struct_lev int, struct_parent int)
    insert ##zzzz_structs select struct_code, struct_name, struct_lev, struct_parent  from structs where struct_code = @struct_code_in
    end
 
exec ('DECLARE ' + @_my_cursor + ' CURSOR FOR select struct_code, struct_name, struct_lev, struct_parent from structs where struct_PARENT = ' +  @_Struct_code_varchar)
exec ('OPEN '+ @_my_cursor)
 
WHILE ( select count(*) from structs where struct_parent = @struct_code_in) - @kol1 > 0
 
BEGIN
exec('FETCH NEXT FROM ' + @_my_cursor + ' into @struct_code, @struct_name,  @struct_lev,  @struct_parent')
insert ##zzzz_structs (struct_code, struct_name, struct_lev, struct_parent) values (@struct_code, @struct_name, @struct_lev, @struct_parent)
set @kol1 = @kol1 + 1
set @par_in = @par_in + 1
exec xxxx_procedure_  @struct_code, 1, @par_in
END
 
exec ('close '+ @_my_cursor)
exec ('DEALLOCATE '+ @_my_cursor)
select * from ##zzzz_structs
drop table ##zzzz_structs
end
ОШИБКА
\
Server: Msg 137, Level 15, State 1, Line 1
Must declare the variable '@struct_code'.
\

ОШИБКА кроется в данной строке
//exec('FETCH NEXT FROM ' + @_my_cursor + ' into @struct_code, @struct_name, @struct_lev, @struct_parent')//
Почемуто он думает что '@struct_code' не обьявлена
что делать или как решить проблему по другому пути
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2007, 15:01
Ответы с готовыми решениями:

Как Удалить MSQL с Макбука
поясните как это ?

Подскажите как можно выгрузить базу данных из erwin в msql
Подскажите как можно выгрузить базу данных из erwin в msql У меня в erwin есть физ/лог схема...

Error: could not convert ‘0l’ from ‘long int’ to ‘Tree::Node*&’
Делаю бинарное дерево. При перегрузке метода добавления элемента компилятор выдает ошибку. Код:...

Node.js - как асинхронные запросы в базу, собрать в один массив?
var Send_Friends_List = function (user_system_id) { mysql_connection.query('SELECT * FROM...

Бинарное дерево и его вывод на экран (Tree Node Pointer Draw)
Бинарное дерево и его вывод на экран (Tree Node Pointer Draw) Прошу помощи в подсказке, для...

9
YURA
22.10.2007, 10:32 2
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare @prt int
set @prt=Нужный родитель
create table #tmp (code int,lvl int)
declare @lvl int
set @lvl=0
 
insert into #tmp ([code],[lvl]) values (@prt,1)
while @@rowcount>0
begin
    set @lvl=@lvl+1
insert into #tmp([code],[lvl])
select b.struct_code, a.[lvl]+1 from #tmp as a inner join struct_parent as b on a.[code]=b.[struct_parent] and a.lvl=@lvl
end
delete #tmp where lvl=1
alter table #tmp drop column [lvl]
Вот и весь результат в #tmp
(Если между struct_parent и struct_code есть однозначная дуга, то все будет работать правильно, в противном случае возможны циклические ссылки)

А чтобы в exec('') переменные было видно - объявлять их нужно глобально(@@пер)
tolik
22.10.2007, 11:18 3
обьевляй их как хочешь (глобально, локально), но Server всеровно говорит что переменая не создана. Что это очередная дарка у Microsofta
tolik
22.10.2007, 14:03 4
а за код огромный сенкс, а если еще не сложно обьеснити функцию '@@rowcount'
22.10.2007, 14:03
YURA
23.10.2007, 06:43 5
А что, без доков работаете?
tolik
23.10.2007, 09:56 6
А что есть док, если не сложно просвети!!!
Зарание благодарен
Ghost
23.10.2007, 12:55 7
Гы-гы!
SQL стоИт, а доков нету ))
sqlbol.chm - и наслаждайся жизнью (для SQL SERVER 7.0)
jul
25.10.2007, 17:30 8
Не проще ли ипользовать user-defined function,
возврашаюшую таблицу. На весь код уйдет несколько
строчек.
Ghost
28.10.2007, 10:24 9
UDF для MS SQL появился под SQL2K, под 7-кой его нет.
Так что продложение не вполне корректно - неясно, какой сиквель у чела стоит
jul
28.10.2007, 11:11 10
Ты прав.
Я использую UDF под 2000 в аналогичной ситуации.

Здесь другой подход к той же проблеме.

http://www.vbpj.com/upload/free/features/vbpj/2001/07jul01/sqlpro0107/rein0107/rein0107p.asp

http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html?dgExplicitTieredReg=&dgImplicitTieredReg=%7B%3EttTaxonomy%3EsearchDatabase%3EEmail%3ETi ps+and+Columns%7D&dgOptInTieredReg=true&dgTieredRegLocation=Tips&FromTaxonomy=%2Fpr%2F282457
28.10.2007, 11:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2007, 11:11

Как создать Tree - НЕ ОБЫЧНЫЙ, А как в XSI Render Tree или Maya
Помогите чем можете: ocx, примерами, деньгами :)

Определить предикат maxelem(Tree, Max), чтобы Max равнялось наибольшему из чисел, входящих в дерево Tree
1# Определить предикат maxelem(Tree,Max) так , чтобы Max равнялось наибольшему из чисел, входящих в...

Tree.FullExpand; Tree.FullCollapse;
Я кладу на форму компонент TreeView и строю дерево. И мне нужно чтобы при двойном нажатии на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru