![]() |
|
Модераторы: Akina |
![]()
|
|
| iNot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.9.2003 Репутация: нет Всего: нет |
Есть таблица, в которой связаны 2 первых поля. Таблица устройств. В ней есть иерархия.
CREATE TABLE [dbo].[DEVICES] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [PARENT] [int] NOT NULL , [DEVLEVEL] [smallint] NULL , [DEVELOPER] [nvarchar] (40) COLLATE Cyrillic_General_CI_AS NULL , [DEVDATE] [smalldatetime] NULL , [ALIAS] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL , [DEVICENAME] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL , [DESCRIPTION] [ntext] COLLATE Cyrillic_General_CI_AS NULL , [STATUS] [smallint] NOT NULL , [CODE] [smallint] NULL , [Position] [int] NULL, CONSTRAINT [PK_DEVICES] PRIMARY KEY CLUSTERED ([ID]) ON [PRIMARY], CONSTRAINT [FK_DEVICES_DEVICES] FOREIGN KEY ([PARENT]) REFERENCES [dbo].[DEVICES] ([ID]) ) Т.е. | id | parent | Дальше идут данные | | 1 | 1 | | | 2 | 1 | | | 3 | 1 | | | 4 | 3 | | | 5 | 2 | | И тому подобное. т.е. есть одно устройство к нему относяться 3 устройства. вот так. |------1.1 Dev1 | |----2.1 Dev2 | |----3.1 Dev3 Ну и так далее. Требуется СКОПИРОВАТЬ это устройство в другое место. к примеру. |------1.1 Dev1 | |----2.1 Dev2 | |----3.1 Dev3 | |------4.3 Dev1 | | |----5.4 Dev2 | | |----6.4 Dev3 Т.е. вся ветка копируется в другое дочернее устройство. Нужна сама процедура копирования. Т.е. задаешь ID, как в примере, 1(id устройства которое копируем), и куда DEST_ID, как в примере, 3(id устройства В которое копируем). И вся ветка копируется. Люди помогите пожайлуста, я теоретически представляю как это сделать, но знаний моих не хватает. Если чего не понятно , спросите, я отвечу. Сейчас получилась процедура(принимаю любые другие процедуры),проблема в том, что эта процетура зацикливается: ALTER procedure move_devices @id int, @dest_id int as declare @ta table ([id] int) declare @tb table ([id] int) insert into @ta select @id insert into @tb select @id while 1=1 begin insert into devices(PARENT, DEVLEVEL, DEVELOPER, DEVDATE, ALIAS, DEVICENAME, [DESCRIPTION], STATUS, CODE, Position) select @dest_id, DEVLEVEL, DEVELOPER, DEVDATE, ALIAS, DEVICENAME, [DESCRIPTION], STATUS, CODE, Position from devices where [id] in (select [id] from @ta) select @dest_id = @@identity insert into @tb select * from @ta delete from @ta insert into @ta select [id] from devices where parent in (select [id] from @tb) delete from @tb if (select count(*) from @ta)<1 break end |
|||
|
||||
| Лкшы |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 9.7.2003 Репутация: нет Всего: нет |
Я не разбирался с процедурой, но исходя из твоей таблицы - ты в Dev 3 копируешь Dev1, который содержит Dev 3, кроторый содержит Dev1..................... и так, пока не кончится место на диске (геометрическая прогрессия 3).
Как я понял, ты хочещь организовать древовидную структуру. Я работаю с InterBase и от себя могу посоветовать почитать на www.ibase.ru "Для разработчик" про древовидные структуры. |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |