1+ BEGIN TRY
2+ BEGIN TRANSACTION ;
3+
4+ DECLARE @CatalogueId INT = 0 ; -- this is catalog ID in the admin page
5+ DECLARE @ResourceOwnerId INT = 0 ; -- this is CreateUserId of the resources to be moved.
6+ DECLARE @NodePathId INT ;
7+ DECLARE @NewNodeId INT ;
8+ DECLARE @NextDisplayOrder INT ;
9+
10+ Select @NodePathId = np .Id from hierarchy .CatalogueNodeVersion cnv
11+ inner join hierarchy .NodeVersion nv ON cnv .NodeVersionId = nv .Id
12+ inner join hierarchy .Node n ON nv .NodeId = n .Id
13+ inner join hierarchy .NodePath np ON n .Id = np .NodeId
14+ Where cnv .Id = @CatalogueId and cnv .Deleted = 0 and nv .Deleted = 0 and n .Deleted = 0 and np .Deleted = 0 ;
15+
16+ -- Get the NodeId for the new catalogue
17+ SELECT @NewNodeId = NodeId FROM [hierarchy].[NodePath] WHERE Id = @NodePathId AND Deleted = 0 ;
18+
19+ -- Get the current max DisplayOrder for that Node
20+ SELECT @NextDisplayOrder = ISNULL (MAX (DisplayOrder), 0 ) FROM [hierarchy].[NodeResource] WHERE NodeId = @NewNodeId AND Deleted = 0 ;
21+
22+ DECLARE @UpdatedResources TABLE (ResourceId INT );
23+
24+ INSERT INTO @UpdatedResources (ResourceId)
25+ SELECT DISTINCT rr .ResourceId FROM [resources].[ResourceReference] rr
26+ INNER JOIN [resources].[Resource] r
27+ ON rr .ResourceId = r .Id
28+ WHERE r .CreateUserId = @ResourceOwnerId AND r .Deleted = 0 AND rr .CreateUserId = @ResourceOwnerId AND rr .Deleted = 0 AND rr .NodePathId = 1 ;
29+
30+ -- Update ResourceReference to point to new catalogue
31+ UPDATE rr
32+ SET rr .NodePathId = @NodePathId
33+ FROM [resources].[ResourceReference] rr
34+ INNER JOIN @UpdatedResources ur
35+ ON rr .ResourceId = ur .ResourceId
36+ WHERE rr .CreateUserId = @ResourceOwnerId
37+ AND rr .Deleted = 0
38+ AND rr .NodePathId = 1 ;
39+
40+ -- Update NodeResource with new NodeId and incrementing DisplayOrder
41+ ;WITH Ordered AS
42+ (
43+ SELECT
44+ nr .ResourceId ,
45+ ROW_NUMBER () OVER (ORDER BY nr .ResourceId ) AS RowNum
46+ FROM [hierarchy].[NodeResource] nr
47+ INNER JOIN @UpdatedResources ur
48+ ON nr .ResourceId = ur .ResourceId
49+ WHERE nr .NodeId = 1
50+ AND nr .CreateUserId = @ResourceOwnerId
51+ AND nr .Deleted = 0
52+ )
53+ UPDATE nr
54+ SET nr .NodeId = @NewNodeId,nr .DisplayOrder = @NextDisplayOrder + o .RowNum
55+ FROM [hierarchy].[NodeResource] nr
56+ INNER JOIN Ordered o ON nr .ResourceId = o .ResourceId ;
57+
58+
59+ -- update noderesourcelookup(Im not sure this is absolutely necessary)
60+ update nrl set nrl .NodeId = @NewNodeId FROM [hierarchy].[NodeResourceLookup] nrl
61+ INNER JOIN @UpdatedResources ur ON nrl .ResourceId = ur .ResourceId
62+ WHERE nrl .CreateUserId = @ResourceOwnerId AND nrl .Deleted = 0
63+
64+ -- Show updated resources
65+ SELECT DISTINCT rv .ResourceId , rv .Title FROM [resources].[ResourceVersion] rv
66+ INNER JOIN @UpdatedResources ur ON rv .ResourceId = ur .ResourceId ;
67+
68+ COMMIT TRANSACTION ;
69+ END TRY
70+ BEGIN CATCH
71+ ROLLBACK TRANSACTION ;
72+
73+ SELECT
74+ ERROR_NUMBER () AS ErrorNumber,
75+ ERROR_MESSAGE () AS ErrorMessage;
76+ END CATCH ;
0 commit comments