RowReorder
Last updated
Last updated
CONVERT([varchar](512), CAST([ExampleTableName].[brixx_RowOrder] as varbinary), 2) as brixx_RowOrder]CREATE Trigger [dbo].[brixx_ExampleTableNameInsert_RowOrder]
ON [dbo].[ExampleTableName]
AFTER INSERT
AS
SET NOCOUNT ON;
/* IF all brixx_RowOrder fields are valid, no need for any processing */
IF (SELECT COUNT(*) FROM inserted WHERE brixx_RowOrder IS NULL) = 0
BEGIN
--PRINT ('No Action needed for Trigger on ExampleTableName');
RETURN;
END
DECLARE @RowId BIGINT;
DECLARE @InsertAfterHierarchyId as HierarchyId;
DECLARE @ParentHierarchyId as HierarchyId;
DROP TABLE IF EXISTS #tmpTable;
SELECT Id INTO #tmpTable FROM inserted WHERE brixx_RowOrder IS NULL;
WHILE EXISTS (SELECT * FROM #tmpTable)
BEGIN
SET @RowId = (SELECT TOP(1) ID FROM #tmpTable ORDER BY Id);
/* If the INSERT does not provide a HierarchyId, generate a value at the end of list */
SET @InsertAfterHierarchyId = (SELECT TOP 1 brixx_RowOrder FROM [dbo].[ExampleTableName] WHERE brixx_RowOrder IS NOT NULL ORDER BY brixx_RowOrder DESC );
IF (@InsertAfterHierarchyId IS NULL)
BEGIN
-- Default Parent ID
SET @ParentHierarchyId = '/1/';
END
ELSE
BEGIN
-- Take Parent ID from Child
SET @ParentHierarchyId = @InsertAfterHierarchyId.GetAncestor(1);
END
UPDATE [dbo].[ExampleTableName] SET brixx_RowOrder = @ParentHierarchyId.GetDescendant(@InsertAfterHierarchyId, NULL) WHERE Id = @RowId;
--PRINT ('INSERT Trigger on ExampleTableName. Parent: ' + @ParentHierarchyId.ToString() + ' Insert After: ' + @InsertAfterHierarchyId.ToString() + ' New RowOrder: ' + @NewHierarchyId.ToString() + ' for Id: ' + CONVERT(varchar(10),@RowId));
DELETE #tmpTable WHERE Id = @RowId;
END
DROP TABLE #tmpTable;UPDATE ExampleTableName SET brix_RowOrder = '/1/' + CONVERT ( nvarchar(30) , Id) + '/' FROM ExampleTableName WHERE brix_RowOrderField IS NULL