CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

存储过程异常,不能返回值。

楼主NewLocksmith(!&)2004-09-03 23:08:06 在 MS-SQL Server / 应用实例 提问

INSERT   tb_student_score   (xh,   xm,   kcapbm,   kcdm,   kcxzdm,   xn,   xq,   xf)  
      VALUES(@xh,   @xm,   @kcapbm,   @kcdm,   @kcxzdm,   @xn,   @xq,   @xf)  
       
      IF   @@error   <>   0    
          RETURN   3                                                       --failure  
      ELSE  
          RETURN   0 --success  
   
  以上是存储过程中的一段,现在执行insert违反了约束,为什么就不继续往下走,我跟踪是也是这样。一下是sql   query输出的信息:  
  服务器:   消息   2627,级别   14,状态   2,过程   pr_add_select,行   138  
  [Microsoft][ODBC   SQL   Server   Driver][SQL   Server]违反了   UNIQUE   KEY   约束   'UK_ss_sid_kcdm_xn_xq'。不能在对象   'tb_student_score'   中插入重复键。  
   
   
  语句已终止。  
  获取调用堆栈失败! 问题点数:100、回复次数:12Top

1 楼zonelive(peter)回复于 2004-09-04 00:27:53 得分 5

提示的很清楚啊  
  根据提示去查看一下应该明白吧  
  "  
  违反了   UNIQUE   KEY   约束   'UK_ss_sid_kcdm_xn_xq'。不能在对象   'tb_student_score'   中插入重复键。"Top

2 楼zheninchangjiang(徐若涵)回复于 2004-09-04 06:41:39 得分 5

不知道你要什么结果Top

3 楼zjcxc(邹建)回复于 2004-09-04 08:04:01 得分 50

--下面演示了SQL错误处理的脆弱性  
  --邹建  
   
  --演示1  
  --测试的存储过程1  
  create   proc   p1  
  as  
  print   12/0  
  if   @@error<>0  
  print   '发生错误1'  
   
  select   *   from   newid()  
  if   @@error<>0  
  print   '发生错误2'  
  go  
   
  --调用  
  exec   p1  
  go  
   
  --删除测试  
  drop   proc   p1  
   
  /*--测试结果  
   
  服务器:   消息   8134,级别   16,状态   1,过程   p1,行   6  
  遇到被零除错误。  
  发生错误1  
  服务器:   消息   208,级别   16,状态   1,过程   p1,行   10  
  对象名   'newid'   无效。  
   
  --*/  
   
   
  /*--结论1:  
   
  错误1,不是严重的错误,所以SQL会执行下去  
  错误2,属于严重的错误,所以SQL没有执行下去,因为没有第二个print的结果  
   
  --*/  
  Top

4 楼zjcxc(邹建)回复于 2004-09-04 08:04:26 得分 30

 
  --演示2,存储过程嵌套调用中的错误  
   
  --测试的存储过程1  
  create   proc   p1  
  as  
  print   12/0  
  if   @@error<>0  
  print   '发生错误1'  
   
  select   *   from   newid()  
  if   @@error<>0  
  print   '发生错误2'  
  go  
   
  --测试的存储过程2  
  create   proc   p2  
  as  
  exec   p1  
   
  if   @@error<>0  
  print   '调用   存储过程1   异常结束'  
  else  
  print   '调用   存储过程1   正常结束'  
  go  
   
  --调用  
  exec   p2  
  go  
   
  --删除测试  
  drop   proc   p1,p2  
   
  /*--测试结果  
   
  服务器:   消息   8134,级别   16,状态   1,过程   p1,行   8  
  遇到被零除错误。  
  发生错误1  
  服务器:   消息   208,级别   16,状态   1,过程   p1,行   12  
  对象名   'newid'   无效。  
  调用   存储过程1   异常结束  
  --*/  
   
   
  /*--结论2:  
   
  被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去  
  --*/  
   
  Top

5 楼zjcxc(邹建)回复于 2004-09-04 08:04:36 得分 5

 
  --演示3,更严重的错误,无法用   set   xact_abort   on   来自动回滚事务  
  set   xact_abort   on --我们希望能自动回滚事务  
  begin   tran  
  create   table   #t(id   int)  
  insert   #t   select   1  
  select   *   from   newid()  
  commit   tran  
  go  
   
  select   *   from   #t  
  rollback   tran  
  /*--测试结果  
   
   
  (所影响的行数为   1   行)  
   
  服务器:   消息   208,级别   16,状态   1,行   5  
  对象名   'newid'   无效。  
   
  id                      
  -----------    
  1  
   
  (所影响的行数为   1   行)  
  --*/  
   
  /*--结论3:  
   
  我们希望   set   xact_abort   on   可以实现出错时自动回滚事务  
  但结果令我们希望,出错时,事务并没有被回滚  
  因为我们查询到了#t的结果,而且最后的回滚语句也并没有报错  
  --*/  
  Top

6 楼NewLocksmith(!&)回复于 2004-09-04 09:43:13 得分 0

那么,各位高手,我的存储过程   RETURN   3       没有办法被执行?那我如何判断存储过程执行是否成功呢?在asp中Top

7 楼NewLocksmith(!&)回复于 2004-09-04 09:44:24 得分 0

upTop

8 楼zjcxc(邹建)回复于 2004-09-04 09:54:54 得分 0

在asp中用on   error进行错误处理.Top

9 楼NewLocksmith(!&)回复于 2004-09-04 10:16:38 得分 0

To:zjcxc(邹建)   (   )    
  邹老大,麻烦你给个详细的代码如何?Top

10 楼NewLocksmith(!&)回复于 2004-09-04 10:51:56 得分 0

upTop

11 楼haoK(haoK.Y)回复于 2004-09-04 10:59:43 得分 5

请问错误严重到什么程度,才会造成脚本执行中断?或者有其他什么规则?  
   
  在《联机丛书》中说:  
  严重级别为   19   或更高的错误信息将停止当前的批处理。严重级别为   20   或更高的错误信息被认为是严重错误,将终止客户连接。此范围的错误信息可能影响数据库中的所有进程,并可能表明数据库或对象损坏。严重级别从   19   到   25   的错误信息均写入错误日志。  
   
  可是以上的错误级别都是16,why回中断下面的脚本执行?  
  Top

12 楼NewLocksmith(!&)回复于 2004-09-04 13:08:18 得分 0

upTop

相关问题

  • 关于存储过程返回值!!!
  • 存储过程返回值的问题.
  • 关于存储过程的返回值.
  • 急!!! C# 中存储过程返回值
  • ****存储过程返回值的问题****
  • 存储过程无法返回值
  • 存储过程如何返回值?
  • 存储过程返回值问题?
  • 存储过程的返回值问题
  • 存储过程返回值的问题

关键词

  • 存储过程
  • 测试
  • 服务器
  • 执行
  • 演示
  • 消息
  • 错误
  • 调用
  • 级别
  • kcdm

得分解答快速导航

  • 帖主:NewLocksmith
  • zonelive
  • zheninchangjiang
  • zjcxc
  • zjcxc
  • zjcxc
  • haoK

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo