我有一个带有字段的简单表:
catalog_id hierarchyid NOT NULL UNIQUE,
item_id int NOT NULL identity(1,1),
item_name nvarchar(50) NOT NULL,
我需要创建一个存储过程,它将分支复制到另一个父级。
例如,像这样:
我已经完成了将一个分支从一个父级移动到另一个的过程,这里是:
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 的副本。