Announcement

Collapse
No announcement yet.

Probleme mit meinem Trigger - MS SQLServer 2000

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit meinem Trigger - MS SQLServer 2000

    Hallo.

    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_IDON [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_IDPROBENR FROM DELETED
    --IF UPDATE(PRME_IDBEGIN
        
    --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  SRESULTSTATUS 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 NULLBEGIN
                    SET 
    @MY_FLAG = @MY_FLAG 0
                END 
                
    IF(@MY_SRESULT IS NOT NULL OR @MY_STATUS IS NOT NULLBEGIN
                    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
    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

  • #2
    Hallo Christian,

    Du solltest @My_FLAG mit 0 initialisieren, sonst bleibt er ewig auf NULL

    [highlight=SQL]
    DECLARE @Zahl int;

    SET @Zahl = @Zahl + 1
    SELECT @Zahl
    [/highlight]
    Ergebnis: NULL
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      ok danke. es funktioniert nur jetzt leider immer!. d. h. ich kann keine neue zeile mehr hinzufügen!

      Comment


      • #4
        Der Trigger ist sonst ok, abgesehen von
        1. SET @MY_FLAG = @MY_FLAG + 0 und drum rum ist überflüssig
        2. DELETED kann 1-n Datensätze enthalten, aber dem kommentiertem Teil entnehme ich mal, das Du das schon eingeplant hast

        Das wird dann an Deinen Daten liegen, also das @MY_SRESULT und @MY_STATUS immer NULL sind.
        obwohl in der Probeparam die jeweiligen gesuchten Ergebnisse einen NULL Wert haben
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment

        Working...
        X