CREATE PROCEDURE [dbo].[MoveObject]
@OldPath nvarchar (425),
@OldPrefix nvarchar (850),
@NewName nvarchar (425),
@NewPath nvarchar (425),
@NewParentID uniqueidentifier,
@RenameOnly as bit,
@MaxPathLength as int
AS
DECLARE @LongPath nvarchar(425)
SET @LongPath =
(SELECT TOP 1 Path
FROM Catalog
WHERE
LEN(Path)-LEN(@OldPath)+LEN(@NewPath) > @MaxPathLength AND
Path LIKE @OldPrefix ESCAPE '*')
IF @LongPath IS NOT NULL BEGIN
SELECT @LongPath
RETURN
END
IF @RenameOnly = 0
BEGIN
DECLARE @OldInheritedPolicyID as uniqueidentifier
SELECT @OldInheritedPolicyID = (SELECT PolicyID FROM Catalog with (XLOCK) WHERE Path = @OldPath AND PolicyRoot = 0)
IF (@OldInheritedPolicyID IS NOT NULL)
BEGIN
DECLARE @NewPolicyID as uniqueidentifier
SELECT @NewPolicyID = (SELECT PolicyID FROM Catalog with (XLOCK) WHERE ItemID = @NewParentID)
UPDATE Catalog SET PolicyID = @NewPolicyID WHERE Path = @OldPath
UPDATE Catalog SET PolicyID = @NewPolicyID
WHERE Path LIKE @OldPrefix ESCAPE '*'
AND Catalog.PolicyID = @OldInheritedPolicyID
END
END
update Catalog
set Name = @NewName, Path = @NewPath, ParentID = @NewParentID
where Path = @OldPath
update Catalog
set Path = STUFF(Path, 1, LEN(@OldPath), @NewPath )
where Path like @OldPrefix escape '*'
GO
GRANT EXECUTE ON [dbo].[MoveObject] TO [RSExecRole]
GO