SQL Server SI NO EXISTE ¿Uso?

Ok, entonces mi esquema es este:

Tabla: Horarios

Columnas:

Timesheet_Id (PK, int)Staff_Id (int)Reservado Horas (int)Posted_Flag (booleano)

Esta es una versión extremadamente simplificada de la tabla, pero servirá para los propósitos de esta explicación. Supongamos que una persona solo puede tener un registro de hoja de tiempo.

Lo que estoy tratando de hacer es agregar registros a otra tabla, llamada WorkLog. Cada registro aquí tiene un tiempo asociado con él. Cuando esa tabla se actualice, también quiero actualizar Timesheet_Hours.

Antes de actualizar Timesheet_Hours, quiero comprobar primero que las partes de tiempo relevantes aún no se han publicado, y luego quiero comprobar si hay un registro para actualizar en primer lugar.

La primera parte de la declaración if, que verifica que las hojas de tiempo no se hayan publicado, funciona bien. El problema es la segunda parte. Es checkint para ver que el registro que va a actualizar ya existe. El problema es que siempre genera un error.

NB: el código a continuación se extrae de un procedimiento almacenado ejecutado por los activadores de actualización, inserción y eliminación en la tabla de WorkLog. @PersonID es uno de los parámetros de esa tabla. El procedimiento almacenado funciona bien si comento la segunda parte de esta declaración.

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta