- BEGIN TRANSACTION
- BEGIN try
- UPDATE HumanResources.Employee SET BirthDate = '1975-08-25'
- WHERE EmployeeID = 25
- WAITFOR DELAY '00:00:10'
- SELECT * FROM HumanResources.Employee
- COMMIT
- END try
- BEGIN catch
- IF (ERROR_NUMBER() = 1205))--如果是死锁回滚后继续执行下面的语句
- BEGIN
- ROLLBACK
- END
- ELSE --如果不是死锁抛出异常,停止下面的操作
- BEGIN
- ROLLBACK
- DECLARE @error nvarchar(100)
- SET @error = ERROR_MESSAGE()
- RAISERROR(@error,16,1)
- END
- END catch
TRY...CATCH 使用下列错误函数来捕获错误信息:
ERROR_NUMBER() 返回错误号。
ERROR_MESSAGE() 返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名或时间)提供的值。
ERROR_SEVERITY() 返回错误严重性。
ERROR_STATE() 返回错误状态号。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
对于与TRY...CATCH 构造在同一执行级别发生的错误,TRY...CATCH 将不处理以下两类错误:
1.编译错误,例如阻止批处理执行的语法错误。
2.语句级重新编译过程中出现的错误,例如由于名称解析延迟而造成在编译后出现对象名解析错误。