1

フィールドを持つ単純なテーブルがあります:

catalog_id hierarchyid NOT NULL UNIQUE,
item_id int NOT NULL identity(1,1),
item_name nvarchar(50) NOT NULL,    

ここに画像の説明を入力

ブランチを別の親にコピーするストアド プロシージャを作成する必要があります。

たとえば、次のようなものです。

ここに画像の説明を入力

1 つのブランチをある親から別の親に移動する手順を実行しました。

ALTER PROCEDURE [dbo].[move_child]
@ChildId int,
@NewParentId int
AS 
DECLARE @nold hierarchyid, @nnew hierarchyid
SELECT @nold = catalog_id FROM CatalogsTree WHERE item_id = @ChildId 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @nnew = catalog_id FROM CatalogsTree WHERE item_id = @NewParentId

SELECT @nnew = @nnew.GetDescendant(max(catalog_id), NULL) 
FROM CatalogsTree WHERE catalog_id.GetAncestor(1)=@nnew ;

UPDATE CatalogsTree  
SET catalog_id = catalog_id.GetReparentedValue(@nold, @nnew)
WHERE catalog_id.IsDescendantOf(@nold) = 1 ;

COMMIT TRANSACTION

しかし今、同じ階層と item_name でコピーを作成する必要があります。

4

1 に答える 1