在C#中开发人员可以使用TryCatch/Throw语句对错误进行处理,虽然在2005后,SQL Server也引入了Try/Catch语句,但是Throw没有被移植过来。开发者需要使用RAISERROR语句将错误消息返回到应用程序中,对于自定义的错误信息,需要先在sys.Messages创建错误才可以在RAISEERROR中使用。在2012中,微软终于增加了THROW语句,THROW包含三个参数(可以不用带参数):THROW[ { error_number | @local_variable }, { message | @local_variable },{ state |@local_variable }] [ ; ]注意:如果使用error_number参数,错误号码必须大于50000小于等于 2147483647。下面的例子将使用RAISEERROR和THROW处理被除数不能为0的错误: BEGIN TRY SELECT 1/0 END TRY BEGIN CATCH DECLARE @msg NVARCHAR(MAX)=ERROR_MESSAGE()RAISERROR (@msg, 16, 1)END CATCH 错误信息:
(0 row(s) affected)Msg 50000, Level 16, State 1, Line 6Divide by zero error encountered. BEGIN TRY SELECT 1/0 END TRY BEGIN CATCH THROW END CATCH (0 row(s) affected)Msg 8134, Level 16, State 1, Line 2Divide by zero error encountered. THROW也可以不在TRY/CATCH块中使用: sp_addmessage @msgnum= 51000, @severity =1, @msgtext =N"i am wrong";GO THROW 51000, "i am wrong", 1; 结果:Msg 51000, Level 16, State 1, Line 1i am wrong RAISERROR和Throw的不同:
| RAISERROR statement | THROW statement |
| If a msg_id is passed to RAISERROR, the ID must be defined in sys.messages. | The error_number parameter does not have to be defined in sys.messages. |
| The msg_str parameter can containprintf formatting styles. | The message parameter does not acceptprintf style formatting. |
| The severity parameter specifies the severity of the exception. | There is no severity parameter.The exception severity is always set to 16. |
关于Oracle 11g动态采样SQL Server访问Exchange数据相关资讯 SQL Server SQL Server 2012
- Build2016喜讯:Linux用户注册微软 (03月17日)
- SQL Server on Linux 理由浅析 (03月09日)
- 管理SQL Server服务的登录(启动) (02月13日)
| - 微软要抢甲骨文用户?从Oracle迁移 (03月13日)
- 微软发布面向Linux的SQL Server预 (03月08日)
- SQL Server如何修改自增列值以及相 (01月23日)
|
本文评论 查看全部评论 (0)