Files
Fuchs_Intranet/Fuchs_Database/dbo/Stored Procedures/mfr__updt__users.sql
T
Stefan 10ecdfa2e4 Add Fuchs_Database SSDT project (schema source of truth)
Adds the SQL Server Data Tools project for the fuchs_fds database — tables,
table types, functions and stored procedures that the backend calls (e.g.
fds__getInvoice, fds__merge_bankingtransactions, fds__tt__bankingtransactions,
fds__admin_getReportCatalog, fis_* auth). Build/model caches (bin, obj,
*.dbmdl, *.jfm, *.user) are git-ignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 14:50:54 +02:00

109 lines
3.1 KiB
Transact-SQL

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[mfr__updt__users]
@tblname as nvarchar(50)
, @referencetable nvarchar(50)
, @tgtid bigint
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @now datetime = GETUTCDATE();
DECLARE @tmp [dbo].[mfr__tt__users];
DECLARE @tmp_cmd nvarchar(1000) = N'SELECT DISTINCT * FROM ' + @tblname;
INSERT INTO @tmp EXECUTE [sp_executesql] @tmp_cmd;
BEGIN TRANSACTION;
with SOURCE1 as(
SELECT
*, [op] = ROW_NUMBER() OVER (PARTITION BY [id] order by [version] desc, [lastlogindate] desc)
FROM @tmp
), SOURCE as(
SELECT * from SOURCE1 where [op] = 1
)
MERGE [dbo].[mfr__users] as TARGET
USING SOURCE ON TARGET.[Id] = SOURCE.[Id]
WHEN MATCHED AND (TARGET.[Version] <= SOURCE.[Version] OR TARGET.[CreationDate] <= SOURCE.[CreationDate]) THEN
UPDATE
SET [Version] = SOURCE.[Version]
,[UserName] = SOURCE.[UserName]
,[IsSystem] = SOURCE.[IsSystem]
,[CreationDate] = SOURCE.[CreationDate]
,[IsApproved] = SOURCE.[IsApproved]
,[ContactId] = SOURCE.[ContactId]
,[PreferedLanguage] = SOURCE.[PreferedLanguage]
,[EmailChannelEnabled] = SOURCE.[EmailChannelEnabled]
,[HasFullScreenPreference] = SOURCE.[HasFullScreenPreference]
,[TimeZone] = SOURCE.[TimeZone]
,[PreferedCulture] = SOURCE.[PreferedCulture]
,[IsActive] = SOURCE.[IsActive]
,[IsMobile] = SOURCE.[IsMobile]
,[LastLoginDate] = SOURCE.[LastLoginDate]
,[UserGuideProgress] = SOURCE.[UserGuideProgress]
,[DashboardSettings] = SOURCE.[DashboardSettings]
WHEN NOT MATCHED BY TARGET THEN
INSERT
( [Id]
,[Version]
,[UserName]
,[IsSystem]
,[CreationDate]
,[IsApproved]
,[ContactId]
,[PreferedLanguage]
,[EmailChannelEnabled]
,[HasFullScreenPreference]
,[TimeZone]
,[PreferedCulture]
,[IsActive]
,[IsMobile]
,[LastLoginDate]
,[UserGuideProgress]
,[DashboardSettings])
VALUES
(SOURCE.[Id]
,SOURCE.[Version]
,SOURCE.[UserName]
,SOURCE.[IsSystem]
,SOURCE.[CreationDate]
,SOURCE.[IsApproved]
,SOURCE.[ContactId]
,SOURCE.[PreferedLanguage]
,SOURCE.[EmailChannelEnabled]
,SOURCE.[HasFullScreenPreference]
,SOURCE.[TimeZone]
,SOURCE.[PreferedCulture]
,SOURCE.[IsActive]
,SOURCE.[IsMobile]
,SOURCE.[LastLoginDate]
,SOURCE.[UserGuideProgress]
,SOURCE.[DashboardSettings]);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
INSERT INTO dbo.[fds__admin_dberrors]
VALUES (SUSER_SNAME(), ERROR_NUMBER(), ERROR_STATE(), ERROR_SEVERITY(), ERROR_LINE(), ERROR_PROCEDURE(), ERROR_MESSAGE(), GETDATE());
-- Transaction uncommittable
--IF (XACT_STATE()) = -1
ROLLBACK TRANSACTION;
-- Transaction committable
--IF (XACT_STATE()) = 1
--COMMIT TRANSACTION;
DECLARE @Message varchar(MAX) = ERROR_MESSAGE(), @Severity int = ERROR_SEVERITY(), @State smallint = ERROR_STATE();
RAISERROR (@Message, @Severity, @State);
END CATCH;
END