快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

一个轻易忽视的存储过程问题

sql server 2005中新增加的try catch,可以很轻易捕获非常了,今天大概学习看了下,归纳下要点如下

基本用法BEGIN TRY
{ sql_statement |
statement_block }
END TRY
BEGIN CATCH
{ sql_statement |
statement_block }
END CATCH
,和普通语言的非常处理用法差不多,但要注重的是,SQL SERVER只捕获那些不是严峻的非常,当比如数据库不能连接等这类非常时,是不能捕获的一个例子:BEGIN TRY
DECLARE @X INT
-- Divide by zero to generate Error
SET @X = 1/0
PRINT \\\'Command after error in TRY block\\\'
END TRY
BEGIN CATCH
PRINT \\\'Error Detected\\\'
END CATCH
PRINT \\\'Command after TRY/CATCH blocks\\\'
另外try catch可以嵌套Begin TRY
delete from GrandParent where Name = \\\'John Smith\\\'
print \\\'GrandParent deleted successfully\\\'
End Try
Begin Catch
Print \\\'Error Deleting GrandParent Record\\\'
Begin Try
delete from Parent where GrandParentID =
(select distinct ID from GrandParent where Name = \\\'John Smith\\\')
Print \\\'Parent Deleted Successfully\\\'
End Try
Begin Catch
print \\\'Error Deleting Parent\\\'
Begin Try
delete from child where ParentId =
(select distinct ID from Parent where GrandParentID =
(select distinct ID from GrandParent where Name = \\\'John Smith\\\'))
print \\\'Child Deleted Successfully\\\'
End Try
Begin Catch
Print \\\'Error Deleting Child\\\'
End Catch
End Catch
End Catch
另外,SQL SERVER 2005在非常机制中,提供了error类的方式方便调试,现摘抄如下,比较简朴,不予以解释ERROR_NUMBER(): Returns a number associated with the error.ERROR_SEVERITY(): Returns the severity of the error.ERROR_STATE(): Returns the error state number associated with the error.ERROR_PROCEDURE(): Returns the name of the stored procedure or trigger in which the error occurred.ERROR_LINE(): Returns the line number inside the failing routine that caused the error. ERROR_MESSAGE(): Returns the complete text of the error message. The text includes the values supplied for any substitutable parameters, such as lengths, object names, or times. 最后举例子如下,使用了error类的方式BEGIN TRY
DECLARE @X INT
-- Divide by zero to generate Error
SET @X = 1/0
PRINT \\\'Command after error in TRY block\\\'
END TRY
BEGIN CATCH
PRINT \\\'Error Detected\\\'
SELECT ERROR_NUMBER() ERNumber,
ERROR_SEVERITY() Error_Severity,
ERROR_STATE() Error_State,
ERROR_PROCEDURE() Error_Procedure,
ERROR_LINE() Error_Line,
ERROR_MESSAGE() Error_Message
END CATCH
PRINT \\\'Command after TRY/CATCH blocks\\\'
最后输出Error Detected
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- -------------------- --------- --------------------------------
8134 16 1 NULL 4 Divide by zero error encountered.
返回类别: 教程
上一教程: 学习MYSQL多表操作和备份处理
下一教程: FREEBSD4.9+VSFTPD+MYSQL配置实例

您可以阅读与"一个轻易忽视的存储过程问题"相关的教程:
· 一个高效的数据分页的存储过程 可以轻松应付百万数据
· 将表数据生成SQL脚本的存储过程
· 取得拼音字头的存储过程
· 在SQL Server的存储过程中调用Com组件
· 使用链接服务器执行远程数据库上的存储过程
    微笑服务 优质保证 索取样品