| October, 2011 (1) |
| September, 2011 (1) |
| December, 2010 (1) |
| June, 2010 (1) |
| February, 2010 (1) |
| October, 2009 (2) |
| June, 2008 (1) |
| May, 2008 (1) |
| April, 2008 (4) |
| March, 2008 (4) |
|
|
 Thursday, March 27, 2008
« Lagra filer i SQL Server | Main | Undvik SQL Injection med parametriserade... »
|
Försök och fånga
|
|
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
|
|
|
Total Posts: 17 This Year: 0 This Month: 0 This Week: 0 Comments: 7
|
|