ОБСУЖДЕНИЕ

Перемещение Внутри Дерева

0 ответов 4 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Здравствуйте!я начинающий программист, поэтому может логика быть сформулирована не так как нужно.
Мне необходимо написать хранимку, выполняющая перемещение узлов внутри дерева. всего у меня 7 уровней. Получаю id, P0,P1,...,P7.Как можно это реализовать?
Нужно ли мне использовать курсор или можно обойтись без него?
Вот попытки для одного уровня, но они не увенчались успехом, так как перемещать в узел могу узел только такого же типа и после обновления все возвращается на свое место:
USE [ProjectA2]
GO
/****** Object: StoredProcedure [a74].[account_tree_move] Script Date: 11/11/2013 12:54:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [a74].[account_tree_move]
@et int,
@pk int,
@id int,
@p0 int = 0,
@p1 int = 0,
@p2 int = 0,
@p3 int = 0,
@p4 int = 0,
@p5 int = 0,
@p6 int = 0,
@p7 int = 0,
@shtcut bit = 0

as
set nocount on
begin tran

declare @tbl nvarchar(32)
declare @sql nvarchar(1024)
declare @prm nvarchar(255)

exec apx_et_treename @et, @tbl OUT
if @tbl is null
begin
rollback tran
raiserror (N'Недопустимое значение аргумента',16,-1)
return 0
end

if @pk = 0
begin
select @sql = N'insert into ' + @tbl + N'(ID,P0,P1,P2,P3,P4,P5,P6,P7,SHORTCUT) ' +
N'VALUES (@id,@p0,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@shtcut)'
select @prm = N'@id int, @p0 int, @p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @shtcut bit'
execute sp_executesql @sql, @prm, @id, @p0,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@shtcut
end
else
begin
select @sql = N'update ' + @tbl + N' set P0=@p0,P1=@p1,P2=@p2,P3=@p3,' +
N'P4=@p4,P5=@p5,P6=@p6,P7=@p7,SHORTCUT=@shtcut ' +
N'where PK=@pk '
select @prm = N'@pk int, @p0 int, @p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @shtcut bit'
execute sp_executesql @sql, @prm, @pk, @p0,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@shtcut
end
commit tran
Спасибо заранее за внимание.