Hallo.
Mein erster Beitrag und gleich ein Problem.
Also ich hab heute einen Trigger geschrieben, der wie folgt aussieht.
Dieser Trigger soll laut Anweisung von mir nur dann was löschen, wenn zuvor überprüft wurde ob in der dazugehörigen Tabelle Probeparam keine weiteren Ergebnisse zu den einzelnen Parametern der jeweiligen Probe eingetragen wurden.
Falls dies also nicht so ist (es sind keine Ergebnisse eingetragen) sollen die entsprechenden Parameter mit Hilfe der Probenummer aus der Tabelle Probeparam gelöscht werden und aus der Tabelle Probemeth die entsprechend hierzu gehörige Methode mit der PRME_ID.
Der Trigger ist auch syntaktisch richtig! Allerdings verstehe ich nicht ganz, wieso er obwohl in der Probeparam die jeweiligen gesuchten Ergebnisse einen NULL Wert haben, er die Ausführung verhindert und die entsprechenden Zeilen nicht löscht.
Hoffe es hat jemand eine Idee und es ist nur ein ganz einfacher und total blöder Fehler.
Schon mal vielen Dank an alle die sich hier an der Hilfestellung beteiligen!
Christian
Mein erster Beitrag und gleich ein Problem.
Also ich hab heute einen Trigger geschrieben, der wie folgt aussieht.
PHP Code:
CREATE TRIGGER [TR_CS_DELETEPROBEMETHODE_ID] ON [dbo].[PROBEMETH]
INSTEAD OF DELETE
AS
DECLARE @PRME_ID AS INT
DECLARE @PROBENR AS VARCHAR(50)
DECLARE @MY_SRESULT AS VARCHAR(50)
DECLARE @MY_STATUS AS VARCHAR(50)
DECLARE @MY_FLAG AS INT
--DECLARE my_cursor CURSOR FOR SELECT PRME_ID, PROBENR FROM DELETED
--IF UPDATE(PRME_ID) BEGIN
--OPEN my_cursor
--FETCH NEXT FROM my_cursor INTO @PRME_ID, @PROBENR
--WHILE @@FETCH_STATUS = 0 BEGIN
BEGIN
SELECT @PRME_ID = PRME_ID, @PROBENR = PROBENR FROM DELETED
DECLARE my_inner_cursor CURSOR FOR SELECT SRESULT, STATUS FROM dbo.PROBEPARAM WHERE probenr = @PROBENR
OPEN my_inner_cursor
FETCH NEXT FROM my_inner_cursor INTO @MY_SRESULT, @MY_STATUS
WHILE @@FETCH_STATUS = 0 BEGIN
IF(@MY_SRESULT IS NULL AND @MY_STATUS IS NULL) BEGIN
SET @MY_FLAG = @MY_FLAG + 0
END
IF(@MY_SRESULT IS NOT NULL OR @MY_STATUS IS NOT NULL) BEGIN
SET @MY_FLAG = @MY_FLAG + 1
END
FETCH NEXT FROM my_inner_cursor INTO @MY_SRESULT, @MY_STATUS
END -- WHILE @@FETCH_STATUS = 0
CLOSE my_inner_cursor
DEALLOCATE my_inner_cursor
IF @MY_FLAG = 0 BEGIN
-- DELETE PROBEPARAM
DELETE FROM dbo.PROBEPARAM WHERE probenr = @PROBENR AND SRESULT IS NULL AND STATUS IS NULL
-- DELETE
DELETE FROM dbo.PROBEMETH WHERE prme_id = @PRME_ID and PRME_STATUS IS NULL
END
--FETCH NEXT FROM my_cursor INTO @PRME_ID, @PROBENR
--END -- WHILE @@FETCH_STATUS = 0
--CLOSE my_cursor
--DEALLOCATE my_cursor
COMMIT
END
--END -- IF UPDATE(PRME_ID)
Falls dies also nicht so ist (es sind keine Ergebnisse eingetragen) sollen die entsprechenden Parameter mit Hilfe der Probenummer aus der Tabelle Probeparam gelöscht werden und aus der Tabelle Probemeth die entsprechend hierzu gehörige Methode mit der PRME_ID.
Der Trigger ist auch syntaktisch richtig! Allerdings verstehe ich nicht ganz, wieso er obwohl in der Probeparam die jeweiligen gesuchten Ergebnisse einen NULL Wert haben, er die Ausführung verhindert und die entsprechenden Zeilen nicht löscht.
Hoffe es hat jemand eine Idee und es ist nur ein ganz einfacher und total blöder Fehler.
Schon mal vielen Dank an alle die sich hier an der Hilfestellung beteiligen!
Christian
Comment