Avatar billede hrc Mester
12. oktober 2006 - 11:41 Der er 2 kommentarer og
1 løsning

Undertryk fejl (supress errors) i stored procedure

Jeg har en stored procedure hvori der bevistløst forsøges indsat records. Det er ok og hvis recorden findes i forvejen skal det ignoreres men dog sende fejl 3604 retur i RETURN_VALUE

Proceduren ser således ud (kører SQL-server 2000):

CREATE PROCEDURE SetForm @ref int,@formid int,@navn varchar(40),@fra_dato datetime,@til_dato datetime,@aktiv bit, @new_ref int OUTPUT
AS
  DECLARE @Err int

  IF @ref = 0
  BEGIN
    INSERT INTO form
      (formid,navn,fra_dato,til_dato)
      VALUES(@formid,@navn,@fra_dato,@til_dato)
    SET @Err = @@ERROR
    SET @new_ref = SCOPE_IDENTITY()
  END
  ELSE
  BEGIN
    UPDATE form
      SET formid=@formid,navn=@navn,fra_dato=@fra_dato,til_dato=@til_dato,aktiv=@aktiv
      WHERE ref = @ref
    SET @Err = @@ERROR
    SET @new_ref = @ref
  END
  RETURN(@Err)

Jeg havde håbet fejlen endte i @@ERROR og stoppede der, så jeg i fred og ro, kunne returnere koden i RETURN_VALUE'en.

Da jeg ikke har adgang til 2005's TRY CATCH vil jeg høre om man kan undertrykke/håndtere fejlen på anden måde.
Avatar billede teepee Nybegynder
12. oktober 2006 - 14:45 #1
og fejlen er ikke registreret i @Err eller hvad?
Avatar billede hrc Mester
12. oktober 2006 - 15:13 #2
Jeg kalder den via Delphi og ADO. Når situationen opstår får jeg den sædvanlige EOleException der har ErrorCode -2147217873. Det støder mit øje med den ukendte værdi og jeg kan heller ikke være sikker på, at den altid forbliver denne værdi. Det bedste er om den kommer tilbage med MS-SQL's 3604.

Hvis jeg tjekker RETURN_VALUE i Delphi's Except del så er den 0. Konstruktionen er beskrevet nedenfor:

SProc.Connection.BeginTrans;
try
  ...
  SProc.ExecProc;
  // Ville gerne kunne tjekke RETURN_VALUE her, men der kommer en EOleException
  SProc.Connection.CommitTrans;
except
  // RETURN_VALUE = 0 her
  SProc.Connection.RollbackTrans;
  raise;
end;
Avatar billede hrc Mester
18. oktober 2006 - 10:41 #3
Den giver vist ikke noget. Jeg tjekker på værdien -2147217873 og vil prøve at sove roligt om natten alligevel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester