SQL Server WENN NICHT EXISTIERT Nutzung?

Ok, also mein Schema ist folgendes:

Tabelle: Arbeitszeittabelle_Stunden

Säulen:

Arbeitszeittabelle_Id (PK, int)Staff_Id (int)Gebuchte Stunden (int)Posted_Flag (Boolean)

Dies ist eine extrem vereinfachte Version der Tabelle, die jedoch zur Erläuterung dient. Angenommen, eine Person kann immer nur einen Arbeitszeittabelleneintrag haben.

Ich versuche, Datensätze zu einer anderen Tabelle mit dem Namen WorkLog hinzuzufügen. Jedem Datensatz ist hier eine Zeit zugeordnet. Wenn diese Tabelle aktualisiert wird, möchte ich auch Timesheet_Hours aktualisieren.

Bevor ich Timesheet_Hours aktualisiere, möchte ich zunächst überprüfen, ob die relevanten Arbeitszeittabellen noch nicht veröffentlicht wurden, und anschließend, ob tatsächlich überhaupt ein Datensatz zum Aktualisieren vorhanden ist.

Der erste Teil der if-Anweisung, mit der überprüft wird, ob die Arbeitszeittabellen bereits gebucht wurden, funktioniert einwandfrei. Das Problem ist der zweite Teil. Es wird überprüft, ob der zu aktualisierende Datensatz bereits vorhanden ist. Das Problem ist, dass es immer einen Fehler auslöst.

Hinweis: Der folgende Code wird aus einer gespeicherten Prozedur extrahiert, die von den Auslösern zum Aktualisieren, Einfügen und Löschen in der WorkLog-Tabelle ausgeführt wird. @PersonID ist einer der Parameter dieser Tabelle. Die gespeicherte Prozedur funktioniert einwandfrei, wenn ich den zweiten Teil dieser Anweisung auskommentiere.

IF EXISTS
    (
    SELECT 1
    FROM Timesheet_Hours
    WHERE Posted_Flag = 1
    AND Staff_Id = @PersonID
    )

    BEGIN
        RAISERROR('Timesheets have already been posted!', 16, 1)
        ROLLBACK TRAN
    END
ELSE
    IF NOT EXISTS
        (
        SELECT 1
        FROM Timesheet_Hours
        WHERE Staff_Id = @PersonID
        )

        BEGIN
            RAISERROR('Default list has not been loaded!', 16, 1)
            ROLLBACK TRAN
        END

Antworten auf die Frage(1)

Ihre Antwort auf die Frage