Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование строк MSSQL (можно и в других БД), Как скопировать? 
:(
    Опции темы
iNot
Дата 8.10.2003, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
Лкшы
Дата 10.10.2003, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.7.2003

Репутация: нет
Всего: нет



Я не разбирался с процедурой, но исходя из твоей таблицы - ты в Dev 3 копируешь Dev1, который содержит Dev 3, кроторый содержит Dev1..................... и так, пока не кончится место на диске (геометрическая прогрессия 3).
Как я понял, ты хочещь организовать древовидную структуру. Я работаю с InterBase и от себя могу посоветовать почитать на www.ibase.ru "Для разработчик" про древовидные структуры.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.