Есть таблица, в которой связаны 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
			
		