Servidor SQL se não existir Utilização?
Tabela: Timesheet_ Hours
colunas:
- Timesheet_Id (PK, int)
- Staff_Id (int)
- BookedHours (int)
- Posted_Flag (booleano)
Antes de actualizar a Timesheet_ hours, quero verificar primeiro que as Timesheets relevantes ainda não foram publicadas, e depois quero verificar se existe de facto um registo para actualizar em primeiro lugar.
a primeira parte da declaração de FI, que verifica se as folhas de tempo ainda não foram postadas, funciona bem. O problema é a segunda parte. É checkint para ver se o registro que ele vai atualizar já existe. A questão é que levanta sempre um erro.
NB: o código abaixo é extraído de um procedimento armazenado executado pela actualização, inserção e supressão de gatilhos na tabela WorkLog. @PersonID é um dos parâmetros dessa tabela. O procedimento arquivado funciona bem se eu comentar a segunda parte desta Declaração.
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
1 answers
Já verificou que existe de facto uma linha onde Staff_Id = @PersonID? O que você postou funciona bem em um script de teste, assumindo que a linha existe. Se você comentar a instrução inserir, então o erro é levantado.
set nocount on
create table Timesheet_Hours (Staff_Id int, BookedHours int, Posted_Flag bit)
insert into Timesheet_Hours (Staff_Id, BookedHours, Posted_Flag) values (1, 5.5, 0)
declare @PersonID int
set @PersonID = 1
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
ELSE
print 'No problems here'
drop table Timesheet_Hours