WEB开发网
开发学院数据库MSSQL Server 基于SQL Server 的Exception Handling - PART I 阅读

基于SQL Server 的Exception Handling - PART I

 2008-12-06 10:15:33 来源:WEB开发网   
核心提示: 由于可以通过@@ERROR得到Error的类型,可以帮助我们在编写Stored Procedure的过程中,基于SQL Server 的Exception Handling - PART I(2),借助这个@@ERROR进行一些流程的控制,比如我们知道Error Number为547代表违

由于可以通过@@ERROR得到Error的类型,可以帮助我们在编写Stored Procedure的过程中,借助这个@@ERROR进行一些流程的控制。比如我们知道Error Number为547代表违反外键约束,我们就可以通过@@ERROR的结果是否等于547来进行异常的处理:

UPDATE T_USERS_IN_ROLES SET [USER_ID] = 'dummy text'
IF @@ERROR = 547
PRINT 'The user is not existent'

通过我们上面一个截图我们发现,在

SQL Server Management Studio中执行任何一个语句的时候,如果遇到一个预定义的Error,会打印出相关的Error Message。这些Error Message到底是如何存储的呢?Error message和Error Numbder又是如何进行关联的呢?

实际上,SQL Server通过一个名为sys.messages的系统表来存储关于Error的一些信息[关于sys.messages,在后续的章节中还会提及]。下面是sys.messages的结构:message_id不仅仅代表message的唯一标识,对于一个预定义的Error,其Error number就是这个message_id。由于Localization的需要,我们需要为不同的语言定义不同的Message,这些Message共享一个message_id, 具体采用何种语言通过luange_id来标识。Severity代表Error的严重程度,我将在后续部分专门介绍。is_event_logged是一个Indicator,表明出现该Error是否需要在Event log中进行日志记录,text当然就是message文本了。

基于SQL Server 的Exception Handling - PART I

我们可以通过下面的SQL来进行验证:

DECLARE @result INT
DECLARE @error INT
SET @result = 5/0
SET @error = @@ERROR
SELECT @error,sys.messages.* FROM sys.messages WHERE message_id = @error
Go

上一页  1 2 3 4  下一页

Tags:基于 SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接