SQL Trigger: Komplette Row an Stored Procedure übergeben
Hallo nochmal,
ich habe da nochmal eine Frage zu einem SQL-Problem:
Meine aktuelle Aufgabenstellung ist es, Änderungen in einer Tabelle unseres ERP-Systems zu überwachen (Nur für bestimmte Spalten). Ich habe mir dazu überlegt einen Trigger zu definieren, der nach dem Update greift und die alten mit den neuen Werten vergleicht. Das scheint soweit auch zu funktionieren. Mein Problem ist jedoch, dass ich den Trigger nur im exklusiven Zugriff bearbeiten kann und ich damit für jede Anpassung (die mein Chef dann vielleicht doch noch gerne hätte
) erstmal alle User rauswerfen muss. Das ist bei einem Rund-um-die-Uhr-Betrieb zwar auch möglich, aber nicht ganz so einfach. Daher nun meine Frage:
Kann ich die Rows, die ich im Trigger per
anspreche irgendwie an eine Stored Procedure übergeben? Also dass mir die beiden Datensätze in der Stored-Procedure zur Verfügung stehen und ich die Auswertung dann dort vornehmen kann?
Das wäre in sofern sehr hilfreich, als dass ich die Procedure auch so bearbeiten kann und nicht erst den exklusiven Lock benötige.
Oder habt Ihr andere Vorschläge?
Danke schonmal für die Hilfe!
P.S.: Es handelt sich um eine SQL Anywhere 16 Datenbank...
ich habe da nochmal eine Frage zu einem SQL-Problem:
Meine aktuelle Aufgabenstellung ist es, Änderungen in einer Tabelle unseres ERP-Systems zu überwachen (Nur für bestimmte Spalten). Ich habe mir dazu überlegt einen Trigger zu definieren, der nach dem Update greift und die alten mit den neuen Werten vergleicht. Das scheint soweit auch zu funktionieren. Mein Problem ist jedoch, dass ich den Trigger nur im exklusiven Zugriff bearbeiten kann und ich damit für jede Anpassung (die mein Chef dann vielleicht doch noch gerne hätte
Kann ich die Rows, die ich im Trigger per
REFERENCING OLD AS OldRow
NEW AS NewRow
Das wäre in sofern sehr hilfreich, als dass ich die Procedure auch so bearbeiten kann und nicht erst den exklusiven Lock benötige.
Oder habt Ihr andere Vorschläge?
Danke schonmal für die Hilfe!
P.S.: Es handelt sich um eine SQL Anywhere 16 Datenbank...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 325346
Url: https://administrator.de/forum/sql-trigger-komplette-row-an-stored-procedure-uebergeben-325346.html
Ausgedruckt am: 13.04.2025 um 00:04 Uhr
9 Kommentare
Neuester Kommentar
Moin,
was spricht dagegen, sowas mit dem Hersteller Support abzusprechen?
So ein schnell geschriebener Trigger oder eine SP kann ungeahnte Folgen haben.
Aus meiner Jugend:
Da hat so eine SP einfach alles einer Tabelle immer wieder komplett in eine UserTable geschrieben und irgendwann war die Datenbank voll (freier MS SQL Server)
Gruss
was spricht dagegen, sowas mit dem Hersteller Support abzusprechen?
So ein schnell geschriebener Trigger oder eine SP kann ungeahnte Folgen haben.
Aus meiner Jugend:
Da hat so eine SP einfach alles einer Tabelle immer wieder komplett in eine UserTable geschrieben und irgendwann war die Datenbank voll (freier MS SQL Server)
Gruss
Also wenn ich dich richtig verstehe willst du nur den Code des Triggers anpassen ohne das die User auf die Anwendung verzichten müssen. Ich hab auf meinem System nicht soviele Zugriffe aber einen Trigger zu droppen und neu zu erstellen läßt sich grundsätzlich in einer Transaktion durchführen und blockiert die Tabelle vielleicht für eine Sekunde wenn überhaupt.
Hier mal mein Code (allerdings MSSQL):
Ich baue also die Änderungen in den Trigger ein und lösche dann erst den alten um den neuen im Anschluss zu erstellen.
Hier mal mein Code (allerdings MSSQL):
IF EXISTS ( SELECT 1
FROM sys.triggers
WHERE object_id = OBJECT_ID(N'[dbo].[unt_insert_log]') )
BEGIN
DROP TRIGGER [dbo].[unt_insert_log]
END;
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[unt_insert_log]
ON [dbo].[unt]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
--bla
END;
Also mit SQL Anywhere habe ich 0 Erfahrung, da müsstest du vielleicht mal den Support (wenn es ihn dort gibt) fragen. Ansich sind Befehle wie DROP und CREATE Trigger ja nichts was man nicht auch während des Betriebs an eine lokale SQL DB übergibt, ich mache das ständig. SQL Anywhere mag hier speziell sein, das wird aber irgendeinem System folgen.