SQL server 错误处理

SQL server 对于一般错误都处理的很好,但是对于对于一些致命错误,会终止代码执行,下面语句用来捕捉记录错误

BEGIN TRY
	
END TRY
BEGIN CATCH
	/* 
		SELECT
			ERROR_NUMBER() AS ErrorNumber,
			ERROR_SEVERITY() AS ErrorSeverity,
			ERROR_STATE() AS ErrorState,
			ERROR_PROCEDURE() AS ErrorProcedure,
			ERROR_LINE() AS ErrorLine,
			ERROR_MESSAGE() AS ErrorMessage
	*/
END CATCH

@@error:全局变量包含了代码中最近一条T-SQL命令的错误状态,0表示命令执行成功。
1,为了检查错误发生的状态,可以将错误发生时@@error赋值给一个局部变量,用来对错误进行适当的检查的处理。
2,可以结合标签,事务处理,减少代码的冗余。例

Begin Tran
insert ,update ,delete执行SQl语句 
if @@ERROR <> 0 GOTO ERROR  
  
Commit Tran  
return  
  
ERROR:  
Rollback tran  
return 

另一种检查SQl语句执行成功的情况是使用@@Rowcount,判断上一条语句有没有执行成功,@@RowCount为零,表示没有语句执行成功。
常见的T-SQl致命错误有
1,数据类型不兼容
2,不可用的SQl Server资源
3,语法错误
4,与某些任务不兼容的SQL Server 高级设置
5,漏写了对象名或者对象名拼写错误

需要查看大多数致命错误可以执行一下语句
  select error,severity,description
  from master.dbo.sysmessages
  where severity>=19
  order by severity,error

简单的raiserror,从Sybase数据继承下来的,只能发送静态的错误编号和消息。返回的严重度总是16.

例,raiserror 55555' unable to update customer'

完整的raiserror

T-SQL错误处理可用的严重度代码
严重度代码  描述
10状态消息:没有产生任何错误,但是返回了一个消息
11-13 无特别的含义
14 信息消息
15警告消息
16严重错误:程序失败

为消息添加可变参数,例

Raiserror('unable to update%s', 16, -1, 'customer')
customer 可以是变量也可以是常量
多个参数可以用,隔开
RaisError('第一名是%s,第二名是%s 个,第三名是%s 个', 16, -1, @firstname, @secondname, @thirdname)

数据类型规范
类型规范    表示
d 或 i    带符号的整数
o    无符号的八进制数
s   字符串
无符号的整数
x 或 X   无符号的十六进制数
RAISERROR(N'<<%*.*s>>', -- Message text.
           10, -- Severity,
           1, -- State,
           7, -- First argument used for width.
           3, -- Second argument used for precision.
           N'abcde'); -- Third argument supplies the string.
-- The message text returned is: <<    abc>>.
GO
RAISERROR (N'<<%7.3s>>', -- Message text.
           10, -- Severity,
           1, -- State,
           N'abcde'); -- First argument supplies the string.
-- The message text returned is: <<    abc>>.
GO

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server错误号是一个32位的整数值。它用于标识在SQL Server数据库中发生的各种错误和异常情况。错误号的范围是从-2147483648到+2147483647。 错误号的前6位是用于指定错误的分组,后面的位数是用于具体标识错误的细节。例如,错误号1-999是用于指示系统错误,如连接丢失或网络问题。错误号1000-1999用于指示语法错误或查询执行错误错误号2000-2999用于指示数据库引擎错误,如死锁或内存不足。 需要注意的是,错误号是可变的,不同版本的SQL Server可能在错误号的分配上有所不同。因此,在编写代码或处理错误时,建议始终参考相关版本的错误号文档。 错误号在处理和调试SQL Server数据库时非常有用。通过查看错误号,我们可以更好地理解和解决问题。我们可以将错误号与系统提供的错误消息和查询日志中的错误信息进行对照,以找到出错的原因和解决方法。 总的来说,SQL Server错误号是一个用于标识不同类型错误和异常的整数值。它们是在SQL Server数据库中进行错误处理和调试时的重要参考依据。 ### 回答2: SQL Server 错误号是一个32位的整数,被用来标识不同的错误。它由两个部分组成:第一个部分代表错误的种类,第二部分代表具体的错误编号。 在 SQL Server 2012 之前的版本,错误号被定义为32位整数。然而,从 SQL Server 2012 开始,错误号已经被重新定义为64位整数。这样做是为了提供更多的错误代码来区分各种不同的错误情况。 具体说来,64位的错误号分为以下几个部分: 1. 0-9位:错误的严重程度,表示错误的重要程度,从 1(最低严重程度)到 25(最高严重程度)。一般情况下,严重程度为 11-16 的错误是用户可恢复的错误,可以通过用户的操作解决;严重程度为 17-19 的错误是严重的错误,需要管理员的介入解决;严重程度为 20-25 的错误是非常严重的错误,需要重启数据库解决。 2. 10-17位:错误的组件,表示错误发生的是哪个组件,如数据库引擎、SQL Server Agent 等。 3. 18-24位:错误的种类,表示错误的类别,如语法错误、权限错误等。 4. 25-64位:错误代码,具体标识某种错误的编号。 通过错误号可以很方便地获得错误的具体信息,帮助开发人员快速定位和解决问题。当程序遇到错误时,可以捕获错误号并根据其信息来处理相应的错误情况。 ### 回答3: 在SQL Server中,错误号是一种用于标识发生的错误或异常的代码。它们帮助我们了解出现问题的原因,并根据需要采取相应的处理措施。SQL Server中的错误号是一个整数值,通常为32位,其范围从-2147483648到2147483647,但在一些情况下也可以达到64位。 64位错误号通常用于标识比较严重或高级的错误或异常情况。这些错误可能涉及到数据库的完整性、安全性或性能方面的问题。例如,错误号64可能表示数据库文件访问权限不足,导致无法读取或写入数据库文件,或者可能表示连接到服务器的某个客户端应用程序没有足够的权限执行某个操作。 当我们在使用SQL Server时遇到64位错误号,通常需要参考SQL Server错误文档或使用搜索引擎来了解具体的错误含义和解决方案。通过查找相关文档,我们可以找到有关错误号64的详细描述,以及可能的原因和解决步骤。此外,我们还可以尝试通过调整权限、重新配置数据库或更改相应的设置来解决这个问题。 总之,SQL Server中的64位错误号是一种用于标识严重或高级错误或异常的代码,需要仔细研究和解决。通过参考错误文档和采取适当的措施,我们可以解决这些错误并有效地管理SQL Server数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值