两年没怎么用Sql Server了,出去面试的时候连存储过程都写不顺畅了,太丢人了。
这里对Sql Server 2005及以上的版本在存储过程事务及异常处理方面做个记录,
if (object_id('proc_demo', 'p') is not null) drop proc proc_demogocreate proc proc_demo( @id int)asbegin set nocount on; begin try BEGIN tran @tran delete dt_article where id=@id delete dt_article_albums where article_id=@id commit tran @tran end try begin catch if @@TRANCOUNT > 0 rollback tran @tran declare @ErrMsg nvarchar(4000), @ErrSeverity int select @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY() raiserror (@ErrMsg, @ErrSeverity, 1) --拋出异常 end catchendgoSql server 2005提供了一些系统函数返回错误信息 ERROR_NUMBER()----返回错误的数量 ERROR_SEVERITY() ----返回错误的严重级别 ERROR_STATE() ----返回错误的状态码 ERROR_PROCEDURE() ----返回发生错误的存储过程或者触发器的名称 ERROR_LINE() ----返回错误发生的行数 ERROR_MESSAGE() ----返回错误的详细信息