|
En för mig välkommen nyhet som introducerades i SQL Server 2005 är felhantering genom TRY/CATCH. Innan TRY/CATCH såg felhantering typiskt ut något i den här stilen (lite förenklat): --create table tabell (fält varchar(10)) DECLARE @error int SET @error=0 BEGIN TRAN INSERT INTO tabell (fält) VALUES('abcde12345abcde12345') SET @error=@@error IF @error>0 BEGIN PRINT @error ROLLBACK TRAN GOTO PROC_EXIT END
INSERT INTO tabell (fält) VALUES('abcdefghijabcdefghij') SET @error=@@error IF @error>0 BEGIN PRINT @error ROLLBACK TRAN GOTO PROC_EXIT END
INSERT INTO tabell (fält) VALUES('12345678901234567890') SET @error=@@error IF @error>0 BEGIN PRINT @error ROLLBACK TRAN GOTO PROC_EXIT END
COMMIT TRAN
PROC_EXIT: Med TRY/CATCH är det kortare och i min mening betydligt mer lättförståligt: BEGIN TRY BEGIN TRAN
INSERT INTO tabell (fält) VALUES('12345678901234567890') INSERT INTO tabell (fält) VALUES('abcdefghijabcdefghij') INSERT INTO tabell (fält) VALUES('abcde12345abcde12345') COMMIT TRAN END TRY BEGIN CATCH IF @@TRANCOUNT>0 ROLLBACK TRAN PRINT ERROR_MESSAGE() END CATCH En avgörande skillnad finns mellan "gamla" och "nya" sättet att felhantera: Med TRY/CATCH kastas inga fel till klienten, så det kan definitivt vara läge att slänga in en RAISERROR i sitt CATCH-block. Intressant? Andra bloggar om SQL Server, SQL Server 2005, Felhantering
Kategorier: Felhantering | SQL Server 2005
|