MS SQL Datenbank-Trigger
Die Datenbank-Tabellen enthalten eine InsertTS Spalte, in der bei Anlage ein aktueller Zeitstempel geschrieben wird. Zudem enthalten die Tabellen eine UpdateTS. Der Wert in dieser Spalte soll sich bei einer Änderung auf den aktuellen Zeitstempel ändern. Bei MySQL kann dies direkt über die Tabellen-Konfiguration gesetzt werden. Bei MS SQL muss hierfür ein SQL-Befehl als Datenbank-Trigger angelegt werden.
Bei einigen Invoice-Versionen ist es dazu gekommen, dass die WHERE-Bedingung im SQL-Befehl fehlte.
Dies führt dazu, dass bei jeder Änderung alle UpdateTS-Werte aller Zeilen der Tabelle aktualisiert werden!
Gerade bei den Tabellen Invoice_Posting_Head und Invoice_Posting_Pos kann die fehlende WHERE-Bedingung zu Performance-Problemen und Schreibfehlern (Deadlock) führen.
Bei einem Update werden falsche Trigger nicht automatisiert korrigiert!
Spätestens wenn es beim Kunden zu SQL-Deadlock-Fehlern kommt, sollten die hinterlegten Trigger kontrolliert und ggf. manuell korrigiert werden. Die Trigger können über das Server Management Studio eingesehen und geändert werden. Über "Modify" können bestehende Trigger verändert werden. Bei einem fehlenden Trigger wird lediglich die Update TS-Spalte nicht mehr aktualisiert. Die Angabe kann bei Supportfällen eine Hilfe sein
Im Folgenden werden einige Trigger für die wichtigsten Tabellen angezeigt.
Invoice_Posting_Head
USE [DEX_Workflow]
GO
/****** Object: Trigger [dbo].[trigger_invoice_posting_head_updatets] Script Date: 11.02.2026 07:29:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_invoice_posting_head_updatets] ON [dbo].[Invoice_Posting_Head]
AFTER UPDATE AS BEGIN
SET NOCOUNT ON;
UPDATE invoice_posting_head SET UpdateTS = GETDATE()
WHERE
ID IN (
SELECT
DISTINCT ID
FROM
Inserted
);
END;
Invoice_Posting_Pos
USE [DEX_Workflow]
GO
/****** Object: Trigger [dbo].[trigger_invoice_posting_pos_updatets] Script Date: 11.02.2026 08:03:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_invoice_posting_pos_updatets] ON [dbo].[Invoice_Posting_Pos]
AFTER UPDATE AS BEGIN
SET NOCOUNT ON;
UPDATE invoice_posting_pos SET UpdateTS = GETDATE()
WHERE
ID IN (
SELECT
DISTINCT ID
FROM
Inserted
);
END;
Mit der Auslieferung der Version 2.0.500 wurden neue Tabellen für Ausgangsrechnungen ausgeliefert und hier müssen die Trigger korrigiert werden!
Die Datenbanktabellen entahlten die Tabellen aller DEXPRO-Module und im Luafe der Zeit kommen auch neue Module hinzu. Für die Erstellung von Ausgangsrechungen (OutgoingInvoice) sind neue Tabellen hinzugekommen und hier wurden leider falsche Trigger ohne WHERE-Bedingung ausgeliefert. Dies hat keine Auswirkung, solange das Modul für die Ausgangsrechnungen nicht verwendet wird.
OutgoingInvoice_Gentable_SearchFields
USE [DEX_Workflow]
GO
/****** Object: Trigger [dbo].[trigger_outgoinginvoice_gentable_searchfields_updatets] Script Date: 11.02.2026 08:24:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_outgoinginvoice_gentable_searchfields_updatets] ON [dbo].[OutgoingInvoice_Gentable_SearchFields]
AFTER UPDATE AS BEGIN
SET NOCOUNT ON;
UPDATE outgoinginvoice_gentable_searchfields SET UpdateTS = GETDATE()
WHERE
ID IN (
SELECT
DISTINCT ID
FROM
Inserted
);
END;
OutgoingInvoice_Posting_Head
USE [DEX_Workflow]
GO
/****** Object: Trigger [dbo].[trigger_outgoinginvoice_posting_head_updatets] Script Date: 11.02.2026 08:15:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_outgoinginvoice_posting_head_updatets] ON [dbo].[OutgoingInvoice_Posting_Head]
AFTER UPDATE AS BEGIN
SET NOCOUNT ON;
UPDATE outgoinginvoice_posting_head SET UpdateTS = GETDATE()
WHERE
ID IN (
SELECT
DISTINCT ID
FROM
Inserted
);
END;
OutgoingInvoice_Posting_Pos
USE [DEX_Workflow]
GO
/****** Object: Trigger [dbo].[trigger_outgoinginvoice_posting_pos_updatets] Script Date: 11.02.2026 08:19:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trigger_outgoinginvoice_posting_pos_updatets] ON [dbo].[OutgoingInvoice_Posting_Pos]
AFTER UPDATE AS BEGIN
SET NOCOUNT ON;
UPDATE outgoinginvoice_posting_pos SET UpdateTS = GETDATE()
WHERE
ID IN (
SELECT
DISTINCT ID
FROM
Inserted
);
END;

No Comments