Files
Fuchs_Intranet/Fuchs_Database/dbo/Stored Procedures/fis_admin_setUserGroup.sql
T
Stefan b26c24ef98 feat: Enhance user group management and transaction handling in stored procedures
- Improved user group deletion logic to accurately report success or failure.
- Updated user group renaming checks to prevent unintended inserts or updates.
- Added documentation on transaction blocking risks during full resets in stored procedures.
- Removed unnecessary login scripts from database project.
2026-09-16 09:42:32 +02:00

66 lines
2.1 KiB
Transact-SQL

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE PROCEDURE [dbo].[fis_admin_setUserGroup]
@authaccount varchar(5)
,@usergroup_id varchar(5)
,@name nvarchar(255)
,@enc_key uniqueidentifier
AS
BEGIN
SET NOCOUNT ON;
DECLARE @utcnow datetime = GETUTCDATE();
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
DECLARE @createdID as TABLE ([id] varchar(5));
-- Renaming an existing group (@usergroup_id supplied) requires that id to currently be an
-- active group; otherwise the MERGE below would silently INSERT it as a brand-new group
-- (rename-of-unknown-id becoming create) or resurrect/UPDATE a soft-deleted row without
-- clearing its DateDeleted (leaving it deleted yet renamed). @usergroup_id = NULL (create)
-- always passes this check.
IF @auth > 1 AND (@usergroup_id IS NULL OR EXISTS (SELECT * FROM [dbo].[fis_usergroups] WHERE [usergroup_id] = @usergroup_id AND [DateDeleted] IS NULL))
BEGIN
MERGE [dbo].[fis_usergroups] as TARGET
USING (VALUES( ISNULL(@usergroup_id, [dbo].[fis_fn_id] ('fis_usergroups'))
,ENCRYPTBYKEY(@enc_key, @name)
)) as SOURCE([usergroup_id],[name_enc])
ON TARGET.[usergroup_id] = SOURCE.[usergroup_id]
WHEN MATCHED THEN
UPDATE SET
TARGET.[name_enc] = SOURCE.[name_enc]
,TARGET.[UserModified] = @authaccount
,TARGET.[DateModified] = @utcnow
WHEN NOT MATCHED BY TARGET THEN
INSERT
([usergroup_id]
,[name_enc]
,[UserCreated]
,[DateCreated]
,[UserModified]
,[DateModified]
,[UserDeleted]
,[DateDeleted])
VALUES
(SOURCE.[usergroup_id]
,SOURCE.[name_enc]
,@authaccount
,@utcnow
,@authaccount
,@utcnow
,NULL
,NULL)
OUTPUT inserted.[usergroup_id]
INTO @createdID;
SELECT TOP(1) * FROM [dbo].[fis_admin_getUserGroupList](@authaccount, @usergroup_id) ual
JOIN @createdID as id on ual.[usergroup_id] = id.[id];
END
END